60a06040523480156200001157600080fd5b506040516200513938038062005139833981016040819052620000349162000169565b604080518082018252601c81527f5361626c696572205632204c6f636b7570204c696e656172204e46540000000060208083019190915282518084018452601181527029a0a116ab1916a627a1a5aaa816a624a760791b9181019190915230608052600080546001600160a01b03199081166001600160a01b03898116918217845560018054909316908916179091559351879487948794909390928792879290917fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf80908290a350600390506200010c838262000264565b5060046200011b828262000264565b5050600a80546001600160a01b0319166001600160a01b03939093169290921790915550506001600955506200033092505050565b6001600160a01b03811681146200016657600080fd5b50565b6000806000606084860312156200017f57600080fd5b83516200018c8162000150565b60208501519093506200019f8162000150565b6040850151909250620001b28162000150565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001e857607f821691505b6020821081036200020957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200025f576000816000526020600020601f850160051c810160208610156200023a5750805b601f850160051c820191505b818110156200025b5782815560010162000246565b5050505b505050565b81516001600160401b03811115620002805762000280620001bd565b6200029881620002918454620001d3565b846200020f565b602080601f831160018114620002d05760008415620002b75750858301515b600019600386901b1c1916600185901b1785556200025b565b600085815260208120601f198616915b828110156200030157888601518255948401946001909101908401620002e0565b5085821015620003205787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614ded6200034c600039600061298e0152614ded6000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c80639067b677116101c8578063bc063e1a11610104578063d975dfed116100a2578063eac8f5b81161007c578063eac8f5b8146107f1578063f590c17614610804578063f851a44014610817578063fdd46d601461082a57600080fd5b8063d975dfed1461078f578063e985e9c5146107a2578063ea5ead19146107de57600080fd5b8063c87b56dd116100de578063c87b56dd14610736578063cc364f4814610749578063d4dbd20b14610769578063d511609f1461077c57600080fd5b8063bc063e1a14610701578063bc2be1be14610710578063c156a11d1461072357600080fd5b8063a80fc07111610171578063b25645691161014b578063b25645691461069b578063b88d4fde146106ae578063b8a3be66146106c1578063b971302a146106ee57600080fd5b8063a80fc07114610655578063ab167ccc14610668578063ad35efd41461067b57600080fd5b8063a22cb465116101a2578063a22cb4651461061c578063a2ffb8971461062f578063a6202bf21461064257600080fd5b80639067b677146105ee57806395d89b411461060157806396ce14311461060957600080fd5b80634857501f116102a2578063780a82c8116102405780638659c2701161021a5780638659c27014610595578063894e9a0d146105a85780638bad38dd146105c85780638f69b993146105db57600080fd5b8063780a82c8146105465780637cad6cd11461056f5780637de6b1db1461058257600080fd5b80636352211e1161027c5780636352211e146104fa5780636d0cee751461050d57806370a082311461052057806375829def1461053357600080fd5b80634857501f146104c15780634869e12d146104d45780635fe3b567146104e757600080fd5b80631e99d5691161030f57806340e58ee5116102e957806340e58ee514610475578063425d30dd1461048857806342842e0e1461049b57806342966c68146104ae57600080fd5b80631e99d5691461042257806323b872dd1461043957806339a73c031461044c57600080fd5b8063095ea7b311610340578063095ea7b3146103cf5780631400ecec146103e45780631c1cdd4c1461040f57600080fd5b806301ffc9a71461036757806306fdde031461038f578063081812fc146103a4575b600080fd5b61037a610375366004614328565b61083d565b60405190151581526020015b60405180910390f35b6103976108da565b6040516103869190614395565b6103b76103b23660046143a8565b61096c565b6040516001600160a01b039091168152602001610386565b6103e26103dd3660046143e1565b610993565b005b6103f76103f23660046143a8565b610ae7565b6040516001600160801b039091168152602001610386565b61037a61041d3660046143a8565b610b9e565b61042b60095481565b604051908152602001610386565b6103e261044736600461440d565b610c22565b6103f761045a36600461444e565b6002602052600090815260409020546001600160801b031681565b6103e26104833660046143a8565b610c99565b61037a6104963660046143a8565b610d41565b6103e26104a936600461440d565b610d9f565b6103e26104bc3660046143a8565b610dba565b61037a6104cf3660046143a8565b610e3c565b6103f76104e23660046143a8565b610eb8565b6001546103b7906001600160a01b031681565b6103b76105083660046143a8565b610efe565b6103b761051b3660046143a8565b610f63565b61042b61052e36600461444e565b610f8b565b6103e261054136600461444e565b611025565b6105596105543660046143a8565b6110b0565b60405164ffffffffff9091168152602001610386565b6103e261057d36600461444e565b61110f565b6103e26105903660046143a8565b6111fb565b6103e26105a33660046144b7565b611428565b6105bb6105b63660046143a8565b61146b565b60405161038691906144f9565b6103e26105d636600461444e565b611647565b61037a6105e93660046143a8565b6116ea565b6105596105fc3660046143a8565b611772565b6103976117d4565b61042b610617366004614600565b6117e3565b6103e261062a36600461462c565b611804565b6103e261063d366004614665565b611813565b6103e261065036600461444e565b6118c1565b6103f76106633660046143a8565b6119f8565b61042b6106763660046146ea565b611a55565b61068e6106893660046143a8565b611b9c565b6040516103869190614713565b61037a6106a93660046143a8565b611be2565b6103e26106bc3660046147aa565b611c40565b61037a6106cf3660046143a8565b6000908152600b6020526040902060010154600160d01b900460ff1690565b6103b76106fc3660046143a8565b611cb8565b61042b67016345785d8a000081565b61055961071e3660046143a8565b611d12565b6103e2610731366004614859565b611d71565b6103976107443660046143a8565b611e30565b61075c6107573660046143a8565b611ecb565b604051610386919061487e565b6103f76107773660046143a8565b611f78565b6103f761078a3660046143a8565b611fd5565b6103f761079d3660046143a8565b612039565b61037a6107b03660046148ac565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6103e26107ec366004614859565b61207f565b6103b76107ff3660046143a8565b61208d565b61037a6108123660046143a8565b6120ea565b6000546103b7906001600160a01b031681565b6103e26108383660046148f1565b612145565b60006001600160e01b031982167f80ac58cd0000000000000000000000000000000000000000000000000000000014806108a057506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806108d457507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6060600380546108e99061492f565b80601f01602080910402602001604051908101604052809291908181526020018280546109159061492f565b80156109625780601f1061093757610100808354040283529160200191610962565b820191906000526020600020905b81548152906001019060200180831161094557829003601f168201915b5050505050905090565b600061097782612445565b506000908152600760205260409020546001600160a01b031690565b600061099e82610efe565b9050806001600160a01b0316836001600160a01b031603610a2c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b0382161480610a6657506001600160a01b038116600090815260086020908152604080832033845290915290205460ff165b610ad85760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610a23565b610ae283836124a9565b505050565b6000818152600b60205260408120600101548290600160d01b900460ff16610b245760405162b8e7e760e51b815260048101829052602401610a23565b6000838152600b6020526040902054600160f01b900460ff168015610b6257506000838152600b6020526040902060010154600160c81b900460ff16155b15610b9857610b7083612517565b6000848152600b6020526040902060020154610b9591906001600160801b0316614979565b91505b50919050565b6000818152600b60205260408120600101548290600160d01b900460ff16610bdb5760405162b8e7e760e51b815260048101829052602401610a23565b6000610be684612634565b90506000816004811115610bfc57610bfc6146fd565b1480610c1a575060015b816004811115610c1857610c186146fd565b145b949350505050565b610c2c33826126f7565b610c8e5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608401610a23565b610ae2838383612775565b610ca1612983565b610caa81610d41565b15610ccb57604051634a5541ef60e01b815260048101829052602401610a23565b610cd4816120ea565b15610cf55760405163fe19f19f60e01b815260048101829052602401610a23565b6000818152600b60205260409020546001600160a01b03163314610d355760405163216caf0d60e01b815260048101829052336024820152604401610a23565b610d3e816129e7565b50565b6000818152600b60205260408120600101548290600160d01b900460ff16610d7e5760405162b8e7e760e51b815260048101829052602401610a23565b50506000908152600b6020526040902060010154600160c81b900460ff1690565b610ae283838360405180602001604052806000815250611c40565b610dc2612983565b610dcb81610d41565b610e04576040517f817cd63900000000000000000000000000000000000000000000000000000000815260048101829052602401610a23565b610e0d81612d03565b610e335760405163216caf0d60e01b815260048101829052336024820152604401610a23565b610d3e81612d6d565b6000818152600b60205260408120600101548290600160d01b900460ff16610e795760405162b8e7e760e51b815260048101829052602401610a23565b6002610e8484612634565b6004811115610e9557610e956146fd565b14610b985750506000908152600b6020526040902054600160f01b900460ff1690565b6000818152600b60205260408120600101548290600160d01b900460ff16610ef55760405162b8e7e760e51b815260048101829052602401610a23565b610b9583612e1a565b6000818152600560205260408120546001600160a01b0316806108d45760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610a23565b6000610f6e82612445565b6000828152600560205260409020546001600160a01b03166108d4565b60006001600160a01b0382166110095760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610a23565b506001600160a01b031660009081526006602052604090205490565b6000546001600160a01b03163314611065576000546040516331b339a960e21b81526001600160a01b039091166004820152336024820152604401610a23565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf809190a350565b6000818152600b60205260408120600101548290600160d01b900460ff166110ed5760405162b8e7e760e51b815260048101829052602401610a23565b50506000908152600b6020526040902054600160c81b900464ffffffffff1690565b6000546001600160a01b0316331461114f576000546040516331b339a960e21b81526001600160a01b039091166004820152336024820152604401610a23565b600a80546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935233917fa2548bd4b805e907c1558a47b5858324fe8bb4a2e1ddfca647eecbf65610eebc910160405180910390a27f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c6001806009546111df91906149a0565b6040805192835260208301919091520160405180910390a15050565b611203612983565b6000818152600b60205260409020600101548190600160d01b900460ff166112405760405162b8e7e760e51b815260048101829052602401610a23565b81600061124c84612634565b90506004816004811115611262576112626146fd565b0361128357604051634a5541ef60e01b815260048101859052602401610a23565b6003816004811115611297576112976146fd565b036112b85760405163fe19f19f60e01b815260048101859052602401610a23565b60028160048111156112cc576112cc6146fd565b036112ed576040516322cad1af60e11b815260048101859052602401610a23565b6000848152600b60205260409020546001600160a01b0316331461132d5760405163216caf0d60e01b815260048101859052336024820152604401610a23565b61133684612ebe565b60405184907f0eb069207093cd3e51cd1370d2d369770057fbe29947e577e5fb428c6c6fc78f90600090a26000848152600560205260409020546001600160a01b0316803b156113ee576040517f341a0bd9000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0382169063341a0bd990602401600060405180830381600087803b1580156113db57600080fd5b505af19250505080156113ec575060015b505b50506040518181527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a1505050565b611430612983565b8060005b818110156114655761145d848483818110611451576114516149b3565b90506020020135610c99565b600101611434565b50505050565b6114de60408051610160810182526000808252602080830182905282840182905260608084018390526080840183905260a0840183905260c0840183905260e084018390526101008401839052610120840183905284519081018552828152908101829052928301529061014082015290565b6000828152600b60205260409020600101548290600160d01b900460ff1661151b5760405162b8e7e760e51b815260048101829052602401610a23565b6000838152600b602090815260409182902082516101608101845281546001600160a01b03808216835264ffffffffff600160a01b808404821685880152600160c81b8085048316868a015260ff600160f01b860481161515606080890191909152600160f81b909604811615156080880152600188015494851660a088015291840490921660c08601529082048116151560e0850152600160d01b820481161515610100850152600160d81b909104161515610120830152845190810185526002808401546001600160801b038082168452600160801b9091048116958301959095526003909301549093169383019390935261014083019190915290925061162484612634565b6004811115611635576116356146fd565b03610b98576000606083015250919050565b6000546001600160a01b03163314611687576000546040516331b339a960e21b81526001600160a01b039091166004820152336024820152604401610a23565b600180546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935233917fdcb09aef4bf01068924ccce937981cbe59d25ba08380cf941aaaea4e4bd3960d910160405180910390a25050565b6000818152600b60205260408120600101548290600160d01b900460ff166117275760405162b8e7e760e51b815260048101829052602401610a23565b600061173284612634565b90506002816004811115611748576117486146fd565b148061176557506003816004811115611763576117636146fd565b145b80610c1a57506004610c06565b6000818152600b60205260408120600101548290600160d01b900460ff166117af5760405162b8e7e760e51b815260048101829052602401610a23565b50506000908152600b6020526040902060010154600160a01b900464ffffffffff1690565b6060600480546108e99061492f565b60006117ed612983565b6108d46117ff36849003840184614aa6565b612f12565b61180f33838361348c565b5050565b61181b612983565b8381808214611860576040517faec934400000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610a23565b60005b828110156118b7576118af888883818110611880576118806149b3565b905060200201358787878581811061189a5761189a6149b3565b90506020020160208101906108389190614b6c565b600101611863565b5050505050505050565b6000546001600160a01b03163314611901576000546040516331b339a960e21b81526001600160a01b039091166004820152336024820152604401610a23565b6001600160a01b0381166000908152600260205260408120546001600160801b031690819003611968576040517f8410168c0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610a23565b6001600160a01b038216600081815260026020526040902080546fffffffffffffffffffffffffffffffff191690556119ab90336001600160801b03841661355a565b6040516001600160801b03821681526001600160a01b0383169033907fca7a4a65a94ed2f37538814e00e1cd4c41a78261561e3f3794592f11409cf5af9060200160405180910390a35050565b6000818152600b60205260408120600101548290600160d01b900460ff16611a355760405162b8e7e760e51b815260048101829052602401610a23565b50506000908152600b60205260409020600201546001600160801b031690565b6000611a5f612983565b60408051606081018252600060208201819052918101919091524264ffffffffff168152611a9360e0840160c08501614b87565b81510164ffffffffff166020820152611ab3610100840160e08501614b87565b81510164ffffffffff1660408083019190915280516101008101909152610b959080611ae2602087018761444e565b6001600160a01b03168152602001856020016020810190611b03919061444e565b6001600160a01b03168152602001611b216060870160408801614b6c565b6001600160801b03168152602001611b3f608087016060880161444e565b6001600160a01b03168152602001611b5d60a0870160808801614ba2565b15158152602001611b7460c0870160a08801614ba2565b1515815260208101849052604001611b953687900387016101008801614bbf565b9052612f12565b6000818152600b60205260408120600101548290600160d01b900460ff16611bd95760405162b8e7e760e51b815260048101829052602401610a23565b610b9583612634565b6000818152600b60205260408120600101548290600160d01b900460ff16611c1f5760405162b8e7e760e51b815260048101829052602401610a23565b50506000908152600b6020526040902060010154600160d81b900460ff1690565b611c4a33836126f7565b611cac5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608401610a23565b611465848484846135eb565b6000818152600b60205260408120600101548290600160d01b900460ff16611cf55760405162b8e7e760e51b815260048101829052602401610a23565b50506000908152600b60205260409020546001600160a01b031690565b6000818152600b60205260408120600101548290600160d01b900460ff16611d4f5760405162b8e7e760e51b815260048101829052602401610a23565b50506000908152600b6020526040902054600160a01b900464ffffffffff1690565b611d79612983565b6000828152600b60205260409020600101548290600160d01b900460ff16611db65760405162b8e7e760e51b815260048101829052602401610a23565b6000838152600560205260409020546001600160a01b0316338114611df75760405163216caf0d60e01b815260048101859052336024820152604401610a23565b6000611e0285613674565b90506001600160801b03811615611e1e57611e1e858383612145565b611e29828587612775565b5050505050565b6060611e3b82612445565b600a546040517fe9dc6375000000000000000000000000000000000000000000000000000000008152306004820152602481018490526001600160a01b039091169063e9dc637590604401600060405180830381865afa158015611ea3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108d49190810190614bdb565b60408051606081018252600080825260208201819052918101919091526000828152600b60205260409020600101548290600160d01b900460ff16611f255760405162b8e7e760e51b815260048101829052602401610a23565b5050604080516060810182526000838152600b6020818152848320805464ffffffffff600160a01b80830482168852600160c81b9092048116848801529790945291905260010154049092169082015290565b6000818152600b60205260408120600101548290600160d01b900460ff16611fb55760405162b8e7e760e51b815260048101829052602401610a23565b50506000908152600b60205260409020600301546001600160801b031690565b6000818152600b60205260408120600101548290600160d01b900460ff166120125760405162b8e7e760e51b815260048101829052602401610a23565b50506000908152600b6020526040902060020154600160801b90046001600160801b031690565b6000818152600b60205260408120600101548290600160d01b900460ff166120765760405162b8e7e760e51b815260048101829052602401610a23565b610b9583613674565b61180f828261083885613674565b6000818152600b60205260408120600101548290600160d01b900460ff166120ca5760405162b8e7e760e51b815260048101829052602401610a23565b50506000908152600b60205260409020600101546001600160a01b031690565b6000818152600b60205260408120600101548290600160d01b900460ff166121275760405162b8e7e760e51b815260048101829052602401610a23565b50506000908152600b6020526040902054600160f81b900460ff1690565b61214d612983565b8261215784610d41565b1561217857604051634a5541ef60e01b815260048101859052602401610a23565b6000848152600b60205260409020546001600160a01b031633148015816121a557506121a385612d03565b155b156121cc5760405163216caf0d60e01b815260048101869052336024820152604401610a23565b6000858152600560205260409020546001600160a01b03168180156122035750806001600160a01b0316856001600160a01b031614155b15612252576040517f5b97ed72000000000000000000000000000000000000000000000000000000008152600481018790523360248201526001600160a01b0386166044820152606401610a23565b6001600160a01b038516612292576040517fc61a0e9e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160801b03166000036122d8576040517fd2aabcd900000000000000000000000000000000000000000000000000000000815260048101879052602401610a23565b60006122e387613674565b9050806001600160801b0316856001600160801b0316111561234b576040517fa1fb2bbc000000000000000000000000000000000000000000000000000000008152600481018890526001600160801b03808716602483015282166044820152606401610a23565b6123568787876136a9565b336001600160a01b0383161480159061237957506000826001600160a01b03163b115b15612409576040517f13375c3b000000000000000000000000000000000000000000000000000000008152600481018890523360248201526001600160a01b0387811660448301526001600160801b03871660648301528316906313375c3b90608401600060405180830381600087803b1580156123f657600080fd5b505af1925050508015612407575060015b505b50506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7915060200160405180910390a150505050565b6000818152600560205260409020546001600160a01b0316610d3e5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610a23565b600081815260076020526040902080546001600160a01b0319166001600160a01b03841690811790915581906124de82610efe565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600b6020526040812054600160c81b900464ffffffffff164280821115612547575060009392505050565b6000848152600b6020526040902060010154600160a01b900464ffffffffff1680821061259057505050600091825250600b60205260409020600201546001600160801b031690565b6000858152600b6020526040812054600160a01b900464ffffffffff169081840390828403906125c0838361380e565b60008a8152600b60205260408120600201549192506001600160801b03909116906125eb8383613830565b9050808210156126265750505060009788525050600b6020525050604090932060020154600160801b90046001600160801b03169392505050565b9a9950505050505050505050565b6000818152600b6020526040812060010154600160c81b900460ff161561265d57506004919050565b6000828152600b6020526040902054600160f81b900460ff161561268357506003919050565b6000828152600b6020526040902054600160a01b900464ffffffffff164210156126af57506000919050565b6000828152600b60205260409020600201546001600160801b03166126d383612517565b6001600160801b031610156126ea57506001919050565b506002919050565b919050565b60008061270383610efe565b9050806001600160a01b0316846001600160a01b0316148061274a57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b80610c1a5750836001600160a01b03166127638461096c565b6001600160a01b031614949350505050565b826001600160a01b031661278882610efe565b6001600160a01b0316146127ec5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610a23565b6001600160a01b0382166128675760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a23565b612874838383600161383f565b826001600160a01b031661288782610efe565b6001600160a01b0316146128eb5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610a23565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4610ae283838360016138ab565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146129e5576040517fa1c0d6e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60006129f282612517565b6000838152600b6020908152604091829020825160608101845260028201546001600160801b03808216808452600160801b909204811694830194909452600390920154831693810193909352929350909190831610612a68576040516322cad1af60e11b815260048101849052602401610a23565b6000838152600b6020526040902054600160f01b900460ff16612aa1576040516339c6dc7360e21b815260048101849052602401610a23565b8051600090612ab1908490614979565b90506000826020015184612ac59190614979565b6000868152600b6020526040812080547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160f81b1790559091506001600160801b0382169003612b33576000858152600b60205260409020600101805460ff60c81b1916600160c81b1790555b6000858152600b602090815260408083206003810180546fffffffffffffffffffffffffffffffff19166001600160801b0388161790555460059092528220546001600160a01b039182169291166000888152600b60205260409020600101549091506001600160a01b0316612bb381846001600160801b03881661355a565b806001600160a01b0316826001600160a01b0316846001600160a01b03167f5edb27d6c1a327513b90a792050debf074b7194444885e3144d4decc5caaaa508b8989604051612c1e939291909283526001600160801b03918216602084015216604082015260600190565b60405180910390a46040518881527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a16001600160a01b0382163b156118b7576040517f72eba203000000000000000000000000000000000000000000000000000000008152600481018990526001600160a01b0384811660248301526001600160801b038088166044840152861660648301528316906372eba20390608401600060405180830381600087803b158015612ce357600080fd5b505af1925050508015612cf4575060015b156118b7575050505050505050565b6000818152600560205260408120546001600160a01b031633811480612d4c57506001600160a01b038116600090815260086020908152604080832033845290915290205460ff165b80610b95575033612d5c8461096c565b6001600160a01b0316149392505050565b6000612d7882610efe565b9050612d8881600084600161383f565b612d9182610efe565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a461180f8160008460016138ab565b6000818152600b60208181526040808420815160608101835260028201546001600160801b038082168352600160801b9091048116828601526003830154169281019290925285855292909152600190910154600160c81b900460ff1615612e86576020015192915050565b6000838152600b6020526040902054600160f81b900460ff1615612eb55760408101518151610b959190614979565b610b9583612517565b6000818152600b6020526040902054600160f01b900460ff16612ef7576040516339c6dc7360e21b815260048101829052602401610a23565b6000908152600b60205260409020805460ff60f01b19169055565b60015460608201516040517fdcf844a70000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928392169063dcf844a790602401602060405180830381865afa158015612f7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa19190614c52565b90506000612fc58460400151838660e001516020015167016345785d8a00006138ec565b9050612fd981600001518560c00151613a6e565b600954925060405180610160016040528085600001516001600160a01b031681526020018560c001516000015164ffffffffff1681526020018560c001516020015164ffffffffff16815260200185608001511515815260200160001515815260200185606001516001600160a01b031681526020018560c001516040015164ffffffffff1681526020016000151581526020016001151581526020018560a0015115158152602001604051806060016040528084600001516001600160801b0316815260200160006001600160801b0316815260200160006001600160801b0316815250815250600b600085815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548164ffffffffff021916908364ffffffffff16021790555060408201518160000160196101000a81548164ffffffffff021916908364ffffffffff160217905550606082015181600001601e6101000a81548160ff021916908315150217905550608082015181600001601f6101000a81548160ff02191690831515021790555060a08201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060c08201518160010160146101000a81548164ffffffffff021916908364ffffffffff16021790555060e08201518160010160196101000a81548160ff02191690831515021790555061010082015181600101601a6101000a81548160ff02191690831515021790555061012082015181600101601b6101000a81548160ff0219169083151502179055506101408201518160020160008201518160000160006101000a8154816001600160801b0302191690836001600160801b0316021790555060208201518160000160106101000a8154816001600160801b0302191690836001600160801b0316021790555060408201518160010160006101000a8154816001600160801b0302191690836001600160801b0316021790555050509050508260010160098190555080602001516002600086606001516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160801b0316016002600086606001516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160801b0302191690836001600160801b03160217905550613389846020015184613bea565b6133c0333083602001518460000151016001600160801b031687606001516001600160a01b0316613d8d909392919063ffffffff16565b60408101516001600160801b0316156134045760e08401515160408201516060860151613404926001600160a01b03909116913391906001600160801b0316613d8d565b83606001516001600160a01b031684602001516001600160a01b031685600001516001600160a01b03167f075861cbceafeb777e8f15f357121b08f6f3adba387d599bb7b5278ca6192df58633868a608001518b60a001518c60c001518d60e001516000015160405161347d9796959493929190614c6b565b60405180910390a45050919050565b816001600160a01b0316836001600160a01b0316036134ed5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a23565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6040516001600160a01b038316602482015260448101829052610ae29084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990931692909217909152613dde565b6135f6848484612775565b61360284848484613ec6565b6114655760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610a23565b6000818152600b6020526040812060020154600160801b90046001600160801b031661369f83612e1a565b6108d49190614979565b6000838152600b60205260409020600201546136d6908290600160801b90046001600160801b0316614d02565b6000848152600b60209081526040918290206002810180546001600160801b03958616600160801b9081029187168281179384905586516060810188529288161780835292048616938101939093526003909101549093169181018290529161373f9190614979565b6001600160801b031681602001516001600160801b03161061378a576000848152600b6020526040902060018101805460ff60c81b1916600160c81b179055805460ff60f01b191690555b6000848152600b60205260409020600101546001600160a01b03166137b981856001600160801b03861661355a565b6040516001600160801b03841681526001600160a01b03808316919086169087907f40b88e5c41c5a97ffb7b6ef88a0a2d505aa0c634cf8a0275cb236ea7dd87ed4d9060200160405180910390a45050505050565b600061382961382684670de0b6b3a76400008561401a565b90565b9392505050565b60006138296138268484614106565b61384882611be2565b15801561385d57506001600160a01b03831615155b801561387157506001600160a01b03841615155b15611465576040517f0da9b01300000000000000000000000000000000000000000000000000000000815260048101839052602401610a23565b817ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7816040516138dd91815260200190565b60405180910390a15050505050565b6040805160608101825260008082526020820181905291810191909152846001600160801b031660000361393d57506040805160608101825260008082526020820181905291810191909152610c1a565b83821015613981576040517f47152d670000000000000000000000000000000000000000000000000000000081526004810185905260248101839052604401610a23565b828210156139c5576040517f4fea5c1a0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610a23565b6139dd613826856001600160801b0388165b90613830565b6001600160801b0390811660208301526139fe9061382690859088166139d7565b6001600160801b0316604082018190526020820151613a1d9190614d02565b6001600160801b0316856001600160801b031611613a3d57613a3d614d22565b60408101516020820151613a519087614979565b613a5b9190614979565b6001600160801b03168152949350505050565b816001600160801b0316600003613ab1576040517f6095d3bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806020015164ffffffffff16816000015164ffffffffff161115613b1957805160208201516040517f4c23297000000000000000000000000000000000000000000000000000000000815264ffffffffff928316600482015291166024820152604401610a23565b806040015164ffffffffff16816020015164ffffffffff1610613b8357602081015160408083015190517f9fee269100000000000000000000000000000000000000000000000000000000815264ffffffffff928316600482015291166024820152604401610a23565b6000429050816040015164ffffffffff168164ffffffffff1610610ae25760408083015190517f210aec0e00000000000000000000000000000000000000000000000000000000815264ffffffffff80841660048301529091166024820152604401610a23565b6001600160a01b038216613c405760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a23565b6000818152600560205260409020546001600160a01b031615613ca55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a23565b613cb360008383600161383f565b6000818152600560205260409020546001600160a01b031615613d185760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a23565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461180f6000838360016138ab565b6040516001600160a01b03808516602483015283166044820152606481018290526114659085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161359f565b6000613e33826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166141ef9092919063ffffffff16565b9050805160001480613e54575080806020019051810190613e549190614d38565b610ae25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610a23565b60006001600160a01b0384163b1561401257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613f0a903390899088908890600401614d55565b6020604051808303816000875af1925050508015613f45575060408051601f3d908101601f19168201909252613f4291810190614d91565b60015b613ff8573d808015613f73576040519150601f19603f3d011682016040523d82523d6000602084013e613f78565b606091505b508051600003613ff05760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610a23565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610c1a565b506001610c1a565b60008080600019858709858702925082811083820303915050806000036140545783828161404a5761404a614dae565b0492505050613829565b83811061409e576040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610a23565b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b600080806000198486098486029250828110838203039150508060000361413a5750670de0b6b3a7640000900490506108d4565b670de0b6b3a76400008110614185576040517f5173648d0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610a23565b6000670de0b6b3a7640000858709620400008185030493109091037d40000000000000000000000000000000000000000000000000000000000002919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b6060610c1a848460008585600080866001600160a01b031685876040516142169190614dc4565b60006040518083038185875af1925050503d8060008114614253576040519150601f19603f3d011682016040523d82523d6000602084013e614258565b606091505b509150915061426987838387614274565b979650505050505050565b606083156142e35782516000036142dc576001600160a01b0385163b6142dc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a23565b5081610c1a565b610c1a83838151156142f85781518083602001fd5b8060405162461bcd60e51b8152600401610a239190614395565b6001600160e01b031981168114610d3e57600080fd5b60006020828403121561433a57600080fd5b813561382981614312565b60005b83811015614360578181015183820152602001614348565b50506000910152565b60008151808452614381816020860160208601614345565b601f01601f19169290920160200192915050565b6020815260006138296020830184614369565b6000602082840312156143ba57600080fd5b5035919050565b6001600160a01b0381168114610d3e57600080fd5b80356126f2816143c1565b600080604083850312156143f457600080fd5b82356143ff816143c1565b946020939093013593505050565b60008060006060848603121561442257600080fd5b833561442d816143c1565b9250602084013561443d816143c1565b929592945050506040919091013590565b60006020828403121561446057600080fd5b8135613829816143c1565b60008083601f84011261447d57600080fd5b50813567ffffffffffffffff81111561449557600080fd5b6020830191508360208260051b85010111156144b057600080fd5b9250929050565b600080602083850312156144ca57600080fd5b823567ffffffffffffffff8111156144e157600080fd5b6144ed8582860161446b565b90969095509350505050565b81516001600160a01b031681526101a081016020830151614523602084018264ffffffffff169052565b50604083015161453c604084018264ffffffffff169052565b506060830151614550606084018215159052565b506080830151614564608084018215159052565b5060a083015161457f60a08401826001600160a01b03169052565b5060c083015161459860c084018264ffffffffff169052565b5060e08301516145ac60e084018215159052565b5061010083810151151590830152610120808401511515908301526101409283015180516001600160801b039081169484019490945260208101518416610160840152604001519092166101809091015290565b60006101608284031215610b9857600080fd5b8015158114610d3e57600080fd5b80356126f281614613565b6000806040838503121561463f57600080fd5b823561464a816143c1565b9150602083013561465a81614613565b809150509250929050565b60008060008060006060868803121561467d57600080fd5b853567ffffffffffffffff8082111561469557600080fd5b6146a189838a0161446b565b9097509550602088013591506146b6826143c1565b909350604087013590808211156146cc57600080fd5b506146d98882890161446b565b969995985093965092949392505050565b60006101408284031215610b9857600080fd5b634e487b7160e01b600052602160045260246000fd5b602081016005831061473557634e487b7160e01b600052602160045260246000fd5b91905290565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561477a5761477a61473b565b604052919050565b600067ffffffffffffffff82111561479c5761479c61473b565b50601f01601f191660200190565b600080600080608085870312156147c057600080fd5b84356147cb816143c1565b935060208501356147db816143c1565b925060408501359150606085013567ffffffffffffffff8111156147fe57600080fd5b8501601f8101871361480f57600080fd5b803561482261481d82614782565b614751565b81815288602083850101111561483757600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b6000806040838503121561486c57600080fd5b82359150602083013561465a816143c1565b606081016108d48284805164ffffffffff908116835260208083015182169084015260409182015116910152565b600080604083850312156148bf57600080fd5b82356148ca816143c1565b9150602083013561465a816143c1565b80356001600160801b03811681146126f257600080fd5b60008060006060848603121561490657600080fd5b833592506020840135614918816143c1565b9150614926604085016148da565b90509250925092565b600181811c9082168061494357607f821691505b602082108103610b9857634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6001600160801b0382811682821603908082111561499957614999614963565b5092915050565b818103818111156108d4576108d4614963565b634e487b7160e01b600052603260045260246000fd5b803564ffffffffff811681146126f257600080fd5b6000606082840312156149f057600080fd5b6040516060810181811067ffffffffffffffff82111715614a1357614a1361473b565b604052905080614a22836149c9565b8152614a30602084016149c9565b6020820152614a41604084016149c9565b60408201525092915050565b600060408284031215614a5f57600080fd5b6040516040810181811067ffffffffffffffff82111715614a8257614a8261473b565b6040529050808235614a93816143c1565b8152602092830135920191909152919050565b60006101608284031215614ab957600080fd5b604051610100810181811067ffffffffffffffff82111715614add57614add61473b565b604052614ae9836143d6565b8152614af7602084016143d6565b6020820152614b08604084016148da565b6040820152614b19606084016143d6565b6060820152614b2a60808401614621565b6080820152614b3b60a08401614621565b60a0820152614b4d8460c085016149de565b60c0820152614b60846101208501614a4d565b60e08201529392505050565b600060208284031215614b7e57600080fd5b613829826148da565b600060208284031215614b9957600080fd5b613829826149c9565b600060208284031215614bb457600080fd5b813561382981614613565b600060408284031215614bd157600080fd5b6138298383614a4d565b600060208284031215614bed57600080fd5b815167ffffffffffffffff811115614c0457600080fd5b8201601f81018413614c1557600080fd5b8051614c2361481d82614782565b818152856020838501011115614c3857600080fd5b614c49826020830160208601614345565b95945050505050565b600060208284031215614c6457600080fd5b5051919050565b8781526001600160a01b038781166020830152610160820190614cb3604084018980516001600160801b03908116835260208083015182169084015260409182015116910152565b86151560a084015285151560c0840152845164ffffffffff90811660e0850152602086015181166101008501526040860151166101208401528084166101408401525098975050505050505050565b6001600160801b0381811683821601908082111561499957614999614963565b634e487b7160e01b600052600160045260246000fd5b600060208284031215614d4a57600080fd5b815161382981614613565b60006001600160a01b03808716835280861660208401525083604083015260806060830152614d876080830184614369565b9695505050505050565b600060208284031215614da357600080fd5b815161382981614312565b634e487b7160e01b600052601260045260246000fd5b60008251614dd6818460208701614345565b919091019291505056fea164736f6c6343000817000a0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000048e6f3cac7b0b428da2fda349c6cb637375bfaa4000000000000000000000000e067b1f79bff10fe277fc09213a1a772cacaf2c2