0x5091d2c0a0fd6048e0fe54a09918361811af8f5a3e61dcfa3c4617ff2168122b6080604052600060055534801561001557600080fd5b50611ccf806100256000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063654df2ca11610066578063654df2ca146101175780637230f8991461012c5780637b04c1811461013f578063bdd9db1814610152578063cd96e3d51461016557600080fd5b80630b0e6f72146100985780632858c55a146100be57806330c593f7146100e357806338d52e0f146100ec575b600080fd5b6100ab6100a6366004610bc5565b610178565b6040519081526020015b60405180910390f35b6007546100ce9063ffffffff1681565b60405163ffffffff90911681526020016100b5565b6100ab60065481565b6003546100ff906001600160a01b031681565b6040516001600160a01b0390911681526020016100b5565b61012a610125366004610c07565b6103c3565b005b6000546100ff906001600160a01b031681565b6002546100ff906001600160a01b031681565b6100ab610160366004610d08565b6105df565b6001546100ff906001600160a01b031681565b60008054336001600160a01b03918216149084161515806101965750805b6101fb5760405162461bcd60e51b815260206004820152602b60248201527f43616e2774206465706f73697420746f207661756c7420776974686f7574206e60448201526a37ba34b334b1b0ba34b7b760a91b60648201526084015b60405180910390fd5b60006040518060c001604052806005600081548092919061021b90610df1565b9091555060408051602080820193909352468183015230606080830191909152825180830382018152608092830184528051908501208552600654858501528483018c90526001600160a01b03808c16868301528815158684015260ff808c1660a097880152845188518188015295880151868601529387015185830152908601511683820152840151151582840152929091015190911660c082015260e00160405160208183030381529060405290508080519060200120925060006102e184610838565b6003549091506102fc906001600160a01b031633838a6108e0565b604051631387104b60e21b8152600481018890526001600160a01b03821690634e1c412c906024016020604051808303816000875af1158015610343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103679190610e18565b506003546006546040517f45654815e53e6fe1f3b3e757b1f3d60439e2a5a2c32c3f48e7983f434f561a0b926103b192889286926001600160a01b031691908d908d908a90610e66565b60405180910390a15050509392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e8054600160401b900460ff161580801561040b57508154600167ffffffffffffffff909116105b15801561042f5750303b15801561042d5750815467ffffffffffffffff166001145b155b1561044c5760405162dc149f60e41b815260040160405180910390fd5b815467ffffffffffffffff19166001178255801561047657815460ff60401b1916600160401b1782555b600080546001600160a01b0319166001600160a01b03891617905560405161049d90610b94565b604051809103906000f0801580156104b9573d6000803e3d6000fd5b50600480546001600160a01b03199081166001600160a01b0393841617825560068990556001805482168985161790556007805463ffffffff191663ffffffff89161790556002805490911686841617905560005460408051632dc893e160e21b81529051919093169263b7224f8492818101926020929091908290030181865afa15801561054c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105709190610ed5565b600380546001600160a01b0319166001600160a01b039290921691909117905580156105d657815460ff60401b19168255604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b84516020808701828120600093909284926105ff928b0190910190610f07565b90504681602001511461065e5760405162461bcd60e51b815260206004820152602160248201527f74686174206973206e6f74207468652064657374696e6174696f6e20636861696044820152603760f91b60648201526084016101f2565b600061066983610838565b6040808401519051636f1954f560e11b81529192506001600160a01b0383169163de32a9ea916106a3918c908c908c908c90600401610fc0565b6020604051808303816000875af11580156106c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e69190610ff9565b935081604001518410156107325760405162461bcd60e51b81526020600482015260136024820152720ecc2d8eaca40d2e640dcdee840cadcdeeaced606b1b60448201526064016101f2565b60608201516000906001600160a01b03161561075257826060015161075f565b6000546001600160a01b03165b600354909150610779906001600160a01b0316828761094d565b8260800151156107f85760005460a0840151604051631d56e0f960e11b8152600481018790526024810188905260ff90911660448201526001600160a01b0390911690633aadc1f290606401600060405180830381600087803b1580156107df57600080fd5b505af11580156107f3573d6000803e3d6000fd5b505050505b6040518481527fe45be18cbedf28c80359bfc4804763693308699219cf5426b2aa738338cd41999060200160405180910390a15050505095945050505050565b6004546000908190610853906001600160a01b031684610983565b600154600754600254600354604051635553a69560e01b81526001600160a01b03948516600482015263ffffffff9093166024840152908316604483015282166064820152919250821690635553a69590608401600060405180830381600087803b1580156108c157600080fd5b505af11580156108d5573d6000803e3d6000fd5b509295945050505050565b6040516001600160a01b0384811660248301528381166044830152606482018390526109479186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506109f7565b50505050565b6040516001600160a01b0383811660248301526044820183905261097e91859182169063a9059cbb90606401610915565b505050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b0381166109f1576040516330be1a3d60e21b815260040160405180910390fd5b92915050565b6000610a0c6001600160a01b03841683610a5a565b90508051600014158015610a31575080806020019051810190610a2f9190611012565b155b1561097e57604051635274afe760e01b81526001600160a01b03841660048201526024016101f2565b6060610a6883836000610a6f565b9392505050565b606081471015610a945760405163cd78605960e01b81523060048201526024016101f2565b600080856001600160a01b03168486604051610ab0919061102d565b60006040518083038185875af1925050503d8060008114610aed576040519150601f19603f3d011682016040523d82523d6000602084013e610af2565b606091505b5091509150610b02868383610b0c565b9695505050505050565b606082610b2157610b1c82610b68565b610a68565b8151158015610b3857506001600160a01b0384163b155b15610b6157604051639996b31560e01b81526001600160a01b03851660048201526024016101f2565b5080610a68565b805115610b785780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b610c508061104a83390190565b6001600160a01b0381168114610b9157600080fd5b60ff81168114610b9157600080fd5b600080600060608486031215610bda57600080fd5b833592506020840135610bec81610ba1565b91506040840135610bfc81610bb6565b809150509250925092565b600080600080600060a08688031215610c1f57600080fd5b8535610c2a81610ba1565b9450602086013593506040860135610c4181610ba1565b9250606086013563ffffffff81168114610c5a57600080fd5b91506080860135610c6a81610ba1565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610cb757610cb7610c78565b604052919050565b60008083601f840112610cd157600080fd5b50813567ffffffffffffffff811115610ce957600080fd5b602083019150836020828501011115610d0157600080fd5b9250929050565b600080600080600060608688031215610d2057600080fd5b853567ffffffffffffffff80821115610d3857600080fd5b818801915088601f830112610d4c57600080fd5b8135602082821115610d6057610d60610c78565b610d72601f8301601f19168201610c8e565b8281528b82848701011115610d8657600080fd5b82828601838301376000928101820192909252909750880135915080821115610dae57600080fd5b610dba89838a01610cbf565b90965094506040880135915080821115610dd357600080fd5b50610de088828901610cbf565b969995985093965092949392505050565b600060018201610e1157634e487b7160e01b600052601160045260246000fd5b5060010190565b600060208284031215610e2a57600080fd5b815167ffffffffffffffff81168114610a6857600080fd5b60005b83811015610e5d578181015183820152602001610e45565b50506000910152565b878152600060018060a01b038089166020840152808816604084015286606084015285608084015280851660a08401525060e060c083015282518060e0840152610100610eb98282860160208801610e42565b80601f19601f8401168501019250505098975050505050505050565b600060208284031215610ee757600080fd5b8151610a6881610ba1565b80518015158114610f0257600080fd5b919050565b600060c08284031215610f1957600080fd5b60405160c0810181811067ffffffffffffffff82111715610f3c57610f3c610c78565b80604052508251815260208301516020820152604083015160408201526060830151610f6781610ba1565b6060820152610f7860808401610ef2565b608082015260a0830151610f8b81610bb6565b60a08201529392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b858152606060208201526000610fda606083018688610f97565b8281036040840152610fed818587610f97565b98975050505050505050565b60006020828403121561100b57600080fd5b5051919050565b60006020828403121561102457600080fd5b610a6882610ef2565b6000825161103f818460208701610e42565b919091019291505056fe608060405234801561001057600080fd5b503361001b81610021565b50610071565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610bd0806100806000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80634e1c412c146100675780635553a69514610098578063715018a6146100ad5780638da5cb5b146100b5578063de32a9ea146100d0578063f2fde38b146100f1575b600080fd5b61007a6100753660046108f0565b610104565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6100ab6100a636600461091e565b610200565b005b6100ab6102ca565b6000546040516001600160a01b03909116815260200161008f565b6100e36100de3660046109cc565b6102de565b60405190815260200161008f565b6100ab6100ff366004610a46565b610478565b600061010e6104b6565b60025460035461012d916001600160a01b0391821691166000196104e3565b600254604080513060208201526001600160a01b03831692636fd3504e928692600160a81b90920463ffffffff16910160405160208183030381529060405261017590610a63565b60035460405160e086901b6001600160e01b0319168152600481019490945263ffffffff909216602484015260448301526001600160a01b031660648201526084016020604051808303816000875af11580156101d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fa9190610a8a565b92915050565b600254600160a01b900460ff16156102555760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b61025e33610573565b6002805463ffffffff909416600160a81b0263ffffffff60a81b196001600160a01b039687166001600160a81b031990961695909517600160a01b179490941693909317909255600180549184166001600160a01b031992831617905560038054929093169116179055565b6102d26104b6565b6102dc6000610573565b565b60006102e86104b6565b6003546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610330573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103549190610ab4565b9050858110156103d957600154604051630afd9fa560e31b81526001600160a01b03909116906357ecfd2890610394908890889088908890600401610af6565b6020604051808303816000875af11580156103b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d79190610b28565b505b6003546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610421573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104459190610ab4565b905061046f61045c6000546001600160a01b031690565b6003546001600160a01b031690836105c3565b95945050505050565b6104806104b6565b6001600160a01b0381166104aa57604051631e4fbdf760e01b81526000600482015260240161024c565b6104b381610573565b50565b6000546001600160a01b031633146102dc5760405163118cdaa760e01b815233600482015260240161024c565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015610533573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105579190610ab4565b905061056d84846105688585610b4a565b610627565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516001600160a01b0383811660248301526044820183905261062291859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506106b3565b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526106788482610716565b61056d576040516001600160a01b038481166024830152600060448301526106ad91869182169063095ea7b3906064016105f0565b61056d84825b60006106c86001600160a01b038416836107b9565b905080516000141580156106ed5750808060200190518101906106eb9190610b28565b155b1561062257604051635274afe760e01b81526001600160a01b038416600482015260240161024c565b6000806000846001600160a01b0316846040516107339190610b6b565b6000604051808303816000865af19150503d8060008114610770576040519150601f19603f3d011682016040523d82523d6000602084013e610775565b606091505b509150915081801561079f57508051158061079f57508080602001905181019061079f9190610b28565b801561046f5750505050506001600160a01b03163b151590565b60606107c7838360006107ce565b9392505050565b6060814710156107f35760405163cd78605960e01b815230600482015260240161024c565b600080856001600160a01b0316848660405161080f9190610b6b565b60006040518083038185875af1925050503d806000811461084c576040519150601f19603f3d011682016040523d82523d6000602084013e610851565b606091505b509150915061086186838361086b565b9695505050505050565b6060826108805761087b826108c7565b6107c7565b815115801561089757506001600160a01b0384163b155b156108c057604051639996b31560e01b81526001600160a01b038516600482015260240161024c565b50806107c7565b8051156108d75780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60006020828403121561090257600080fd5b5035919050565b6001600160a01b03811681146104b357600080fd5b6000806000806080858703121561093457600080fd5b843561093f81610909565b9350602085013563ffffffff8116811461095857600080fd5b9250604085013561096881610909565b9150606085013561097881610909565b939692955090935050565b60008083601f84011261099557600080fd5b50813567ffffffffffffffff8111156109ad57600080fd5b6020830191508360208285010111156109c557600080fd5b9250929050565b6000806000806000606086880312156109e457600080fd5b85359450602086013567ffffffffffffffff80821115610a0357600080fd5b610a0f89838a01610983565b90965094506040880135915080821115610a2857600080fd5b50610a3588828901610983565b969995985093965092949392505050565b600060208284031215610a5857600080fd5b81356107c781610909565b80516020808301519190811015610a84576000198160200360031b1b821691505b50919050565b600060208284031215610a9c57600080fd5b815167ffffffffffffffff811681146107c757600080fd5b600060208284031215610ac657600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000610b0a604083018688610acd565b8281036020840152610b1d818587610acd565b979650505050505050565b600060208284031215610b3a57600080fd5b815180151581146107c757600080fd5b808201808211156101fa57634e487b7160e01b600052601160045260246000fd5b6000825160005b81811015610b8c5760208186018101518583015201610b72565b50600092019182525091905056fea2646970667358221220c59a605290e8b00bafa90d6ec8654f1d610b5285ddb63458e31ea434192ecf5e64736f6c63430008140033a26469706673582212208a3c2ee79d68b8013bb116d2952eccc26d518a04e2740d5211a1219974fa388164736f6c63430008140033