608060405234801561000f575f80fd5b50610e338061001d5f395ff3fe608060405234801561000f575f80fd5b50600436106100cb575f3560e01c806370a082311161008857806395d89b411161006357806395d89b41146101cf578063a9059cbb146101d7578063dd62ed3e146101ea578063f2fde38b146101fd575f80fd5b806370a0823114610178578063715018a6146101ac5780638da5cb5b146101b4575f80fd5b806306fdde03146100cf578063095ea7b3146100ed57806318160ddd1461011057806323b872dd14610141578063313ce5671461015457806337c4733a14610163575b5f80fd5b6100d7610210565b6040516100e49190610a1d565b60405180910390f35b6101006100fb366004610a83565b6102d0565b60405190151581526020016100e4565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016100e4565b61010061014f366004610aab565b6102e9565b604051600681526020016100e4565b610176610171366004610b81565b61030c565b005b610133610186366004610be1565b6001600160a01b03165f9081525f80516020610dde833981519152602052604090205490565b61017661043f565b6033546040516001600160a01b0390911681526020016100e4565b6100d7610452565b6101006101e5366004610a83565b610490565b6101336101f8366004610c01565b61049d565b61017661020b366004610be1565b6104e6565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060915f80516020610dde8339815191529161024e90610c32565b80601f016020809104026020016040519081016040528092919081815260200182805461027a90610c32565b80156102c55780601f1061029c576101008083540402835291602001916102c5565b820191905f5260205f20905b8154815290600101906020018083116102a857829003601f168201915b505050505091505090565b5f336102dd81858561055f565b60019150505b92915050565b5f336102f685828561056c565b6103018585856105cf565b506001949350505050565b5f54610100900460ff161580801561032a57505f54600160ff909116105b806103435750303b15801561034357505f5460ff166001145b6103ab5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156103cc575f805461ff0019166101001790555b6103d461062c565b6103dc61065a565b6103e68383610680565b6103f53364e8d4a510006106ee565b801561043a575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610447610726565b6104505f610780565b565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f80516020610dde8339815191529161024e90610c32565b5f336102dd8185856105cf565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104ee610726565b6001600160a01b0381166105535760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103a2565b61055c81610780565b50565b61043a83838360016107d1565b5f610577848461049d565b90505f1981146105c957818110156105bb57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016103a2565b6105c984848484035f6107d1565b50505050565b6001600160a01b0383166105f857604051634b637e8f60e11b81525f60048201526024016103a2565b6001600160a01b0382166106215760405163ec442f0560e01b81525f60048201526024016103a2565b61043a8383836108b5565b5f54610100900460ff166106525760405162461bcd60e51b81526004016103a290610c6a565b6104506109ee565b5f54610100900460ff166104505760405162461bcd60e51b81526004016103a290610c6a565b5f54610100900460ff166106a65760405162461bcd60e51b81526004016103a290610c6a565b5f80516020610dde8339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036106df8482610d02565b50600481016105c98382610d02565b6001600160a01b0382166107175760405163ec442f0560e01b81525f60048201526024016103a2565b6107225f83836108b5565b5050565b6033546001600160a01b031633146104505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f80516020610dde8339815191526001600160a01b0385166108085760405163e602df0560e01b81525f60048201526024016103a2565b6001600160a01b03841661083157604051634a1406b160e11b81525f60048201526024016103a2565b6001600160a01b038086165f908152600183016020908152604080832093881683529290522083905581156108ae57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516108a591815260200190565b60405180910390a35b5050505050565b5f80516020610dde8339815191526001600160a01b0384166108ef5781816002015f8282546108e49190610dbe565b9091555061095f9050565b6001600160a01b0384165f90815260208290526040902054828110156109415760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016103a2565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b03831661097d57600281018054839003905561099b565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516109e091815260200190565b60405180910390a350505050565b5f54610100900460ff16610a145760405162461bcd60e51b81526004016103a290610c6a565b61045033610780565b5f6020808352835180828501525f5b81811015610a4857858101830151858201604001528201610a2c565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610a7e575f80fd5b919050565b5f8060408385031215610a94575f80fd5b610a9d83610a68565b946020939093013593505050565b5f805f60608486031215610abd575f80fd5b610ac684610a68565b9250610ad460208501610a68565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610b07575f80fd5b813567ffffffffffffffff80821115610b2257610b22610ae4565b604051601f8301601f19908116603f01168101908282118183101715610b4a57610b4a610ae4565b81604052838152866020858801011115610b62575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215610b92575f80fd5b823567ffffffffffffffff80821115610ba9575f80fd5b610bb586838701610af8565b93506020850135915080821115610bca575f80fd5b50610bd785828601610af8565b9150509250929050565b5f60208284031215610bf1575f80fd5b610bfa82610a68565b9392505050565b5f8060408385031215610c12575f80fd5b610c1b83610a68565b9150610c2960208401610a68565b90509250929050565b600181811c90821680610c4657607f821691505b602082108103610c6457634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f82111561043a575f81815260208120601f850160051c81016020861015610cdb5750805b601f850160051c820191505b81811015610cfa57828155600101610ce7565b505050505050565b815167ffffffffffffffff811115610d1c57610d1c610ae4565b610d3081610d2a8454610c32565b84610cb5565b602080601f831160018114610d63575f8415610d4c5750858301515b5f19600386901b1c1916600185901b178555610cfa565b5f85815260208120601f198616915b82811015610d9157888601518255948401946001909101908401610d72565b5085821015610dae57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156102e357634e487b7160e01b5f52601160045260245ffdfe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a264697066735822122027dbe6cc2c70e33e35c12370aec05be92cf3a955606c790afecaa4ca3ac3162664736f6c63430008140033