diff --git a/resources/celerity/map.php b/resources/celerity/map.php
index 1bac228a34..8a0666c8d9 100644
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -1,2194 +1,2194 @@
 <?php
 
 /**
  * This file is automatically generated. Use 'bin/celerity map' to rebuild it.
  * @generated
  */
 return array(
   'names' =>
   array(
-    'core.pkg.css' => '5e574aa1',
-    'core.pkg.js' => '264721e1',
+    'core.pkg.css' => '6d16f22a',
+    'core.pkg.js' => 'd3fecc57',
     'darkconsole.pkg.js' => 'ca8671ce',
     'differential.pkg.css' => 'cb97e095',
     'differential.pkg.js' => '11a5b750',
     'diffusion.pkg.css' => '3783278d',
     'diffusion.pkg.js' => '5b4010f4',
     'javelin.pkg.js' => '65fa3049',
     'maniphest.pkg.css' => 'f1887d71',
     'maniphest.pkg.js' => '2fe8af22',
     'rsrc/css/aphront/aphront-bars.css' => '231ac33c',
     'rsrc/css/aphront/aphront-notes.css' => '6acadd3f',
     'rsrc/css/aphront/context-bar.css' => '1c3b0529',
     'rsrc/css/aphront/dark-console.css' => '6378ef3d',
     'rsrc/css/aphront/dialog-view.css' => 'c01d24b4',
     'rsrc/css/aphront/error-view.css' => '16cd9949',
     'rsrc/css/aphront/lightbox-attachment.css' => '7acac05d',
     'rsrc/css/aphront/list-filter-view.css' => 'ef989c67',
     'rsrc/css/aphront/multi-column.css' => '12f65921',
     'rsrc/css/aphront/notification.css' => '6901121e',
     'rsrc/css/aphront/pager-view.css' => '2e3539af',
     'rsrc/css/aphront/panel-view.css' => '5846dfa2',
     'rsrc/css/aphront/phabricator-nav-view.css' => '80e60fc1',
     'rsrc/css/aphront/request-failure-view.css' => 'da14df31',
     'rsrc/css/aphront/table-view.css' => 'de599000',
     'rsrc/css/aphront/tokenizer.css' => '36903077',
     'rsrc/css/aphront/tooltip.css' => '9c90229d',
     'rsrc/css/aphront/transaction.css' => 'ce491938',
     'rsrc/css/aphront/two-column.css' => '16ab3ad2',
     'rsrc/css/aphront/typeahead.css' => '271456a1',
     'rsrc/css/application/auth/auth.css' => '1e655982',
     'rsrc/css/application/base/main-menu-view.css' => 'd36e0c11',
     'rsrc/css/application/base/notification-menu.css' => 'fc9a363c',
     'rsrc/css/application/base/phabricator-application-launch-view.css' => '5cb75f67',
     'rsrc/css/application/base/standard-page-view.css' => '517cdfb1',
     'rsrc/css/application/chatlog/chatlog.css' => '852140ff',
     'rsrc/css/application/config/config-options.css' => '7fedf08b',
     'rsrc/css/application/config/config-template.css' => '25d446d6',
     'rsrc/css/application/config/setup-issue.css' => '69e640e7',
     'rsrc/css/application/conpherence/menu.css' => '561348ac',
     'rsrc/css/application/conpherence/message-pane.css' => '2aedca89',
     'rsrc/css/application/conpherence/notification.css' => '403cf598',
     'rsrc/css/application/conpherence/update.css' => '1099a660',
     'rsrc/css/application/conpherence/widget-pane.css' => '87b12e0c',
     'rsrc/css/application/contentsource/content-source-view.css' => '4b8b05d4',
     'rsrc/css/application/countdown/timer.css' => '86b7b0a0',
     'rsrc/css/application/diff/inline-comment-summary.css' => '14a91639',
     'rsrc/css/application/differential/add-comment.css' => 'c478bcaa',
     'rsrc/css/application/differential/changeset-view.css' => 'e710a360',
     'rsrc/css/application/differential/core.css' => '7ac3cabc',
     'rsrc/css/application/differential/local-commits-view.css' => '19649019',
     'rsrc/css/application/differential/results-table.css' => '239924f9',
     'rsrc/css/application/differential/revision-comment.css' => '48186045',
     'rsrc/css/application/differential/revision-history.css' => '0e8eb855',
     'rsrc/css/application/differential/revision-list.css' => 'f3c47d33',
     'rsrc/css/application/differential/table-of-contents.css' => '19566f76',
     'rsrc/css/application/diffusion/commit-view.css' => '92d1e8f9',
     'rsrc/css/application/diffusion/diffusion-icons.css' => '384a0f7d',
     'rsrc/css/application/diffusion/diffusion-source.css' => '66fdf661',
     'rsrc/css/application/directory/phabricator-jump-nav.css' => 'f0c5e726',
     'rsrc/css/application/feed/feed.css' => '0d17c209',
     'rsrc/css/application/files/global-drag-and-drop.css' => '697324ad',
     'rsrc/css/application/flag/flag.css' => '5337623f',
     'rsrc/css/application/herald/herald-test.css' => '2b7d0f54',
     'rsrc/css/application/herald/herald.css' => '59d48f01',
     'rsrc/css/application/maniphest/batch-editor.css' => '8f380ebc',
     'rsrc/css/application/maniphest/report.css' => '6fc16517',
     'rsrc/css/application/maniphest/task-edit.css' => '8e23031b',
     'rsrc/css/application/maniphest/task-summary.css' => '6df1a768',
     'rsrc/css/application/objectselector/object-selector.css' => '029a133d',
     'rsrc/css/application/owners/owners-path-editor.css' => '2f00933b',
     'rsrc/css/application/paste/paste.css' => 'aa1767d1',
     'rsrc/css/application/people/people-profile.css' => 'ba7b2762',
     'rsrc/css/application/phame/phame.css' => '450826e1',
     'rsrc/css/application/pholio/pholio-edit.css' => 'b9e59b6d',
     'rsrc/css/application/pholio/pholio-inline-comments.css' => '52be33f0',
     'rsrc/css/application/pholio/pholio.css' => 'd23ace50',
     'rsrc/css/application/phortune/phortune-credit-card-form.css' => 'b25b4beb',
     'rsrc/css/application/phrequent/phrequent.css' => 'ffc185ad',
     'rsrc/css/application/phriction/phriction-document-css.css' => 'b0309d8e',
     'rsrc/css/application/policy/policy-edit.css' => '05cca26a',
     'rsrc/css/application/policy/policy.css' => '957ea14c',
     'rsrc/css/application/ponder/comments.css' => '6cdccea7',
     'rsrc/css/application/ponder/feed.css' => 'e62615b6',
     'rsrc/css/application/ponder/post.css' => 'ebab8a70',
     'rsrc/css/application/ponder/vote.css' => '8ed6ed8b',
     'rsrc/css/application/profile/profile-view.css' => '9bdb9804',
     'rsrc/css/application/projects/project-tag.css' => '095c9404',
     'rsrc/css/application/releeph/releeph-branch.css' => 'b8821d2d',
     'rsrc/css/application/releeph/releeph-colors.css' => '2d2d6aa8',
     'rsrc/css/application/releeph/releeph-core.css' => '140b959d',
     'rsrc/css/application/releeph/releeph-intents.css' => '7364ac97',
     'rsrc/css/application/releeph/releeph-preview-branch.css' => '0e383ca3',
     'rsrc/css/application/releeph/releeph-project.css' => 'ee1f9f57',
     'rsrc/css/application/releeph/releeph-request-differential-create-dialog.css' => '8d8b92cd',
     'rsrc/css/application/releeph/releeph-request-typeahead.css' => '667a48ae',
     'rsrc/css/application/releeph/releeph-status.css' => 'a20631d9',
     'rsrc/css/application/search/search-results.css' => 'f240504c',
     'rsrc/css/application/settings/settings.css' => 'ea8f5915',
     'rsrc/css/application/slowvote/slowvote.css' => '266df6a1',
     'rsrc/css/application/subscriptions/subscribers-list.css' => '5bb30c78',
     'rsrc/css/application/tokens/tokens.css' => 'fb286311',
     'rsrc/css/application/uiexample/example.css' => '4741b891',
     'rsrc/css/core/core.css' => 'da26ddb2',
     'rsrc/css/core/remarkup.css' => '0923dbd6',
     'rsrc/css/core/syntax.css' => '3c18c1cb',
     'rsrc/css/core/z-index.css' => '0fd29d49',
     'rsrc/css/diviner/diviner-shared.css' => '38813222',
     'rsrc/css/font/font-source-sans-pro.css' => '225851dd',
     'rsrc/css/layout/phabricator-action-header-view.css' => 'c14dfc57',
     'rsrc/css/layout/phabricator-action-list-view.css' => '81383e25',
     'rsrc/css/layout/phabricator-crumbs-view.css' => '2d9db584',
     'rsrc/css/layout/phabricator-filetree-view.css' => 'a8c86ace',
     'rsrc/css/layout/phabricator-hovercard-view.css' => '46a13cf0',
     'rsrc/css/layout/phabricator-side-menu-view.css' => '503699d0',
     'rsrc/css/layout/phabricator-source-code-view.css' => '62a99814',
     'rsrc/css/phui/calendar/phui-calendar-day.css' => 'de035c8a',
     'rsrc/css/phui/calendar/phui-calendar-list.css' => 'c1d0ca59',
     'rsrc/css/phui/calendar/phui-calendar-month.css' => '5e762971',
     'rsrc/css/phui/calendar/phui-calendar.css' => '5e1ad989',
     'rsrc/css/phui/phui-box.css' => 'a36cf3a5',
     'rsrc/css/phui/phui-button.css' => '8784a966',
     'rsrc/css/phui/phui-document.css' => '10f59385',
     'rsrc/css/phui/phui-feed-story.css' => '3a59c2cf',
     'rsrc/css/phui/phui-fontkit.css' => 'de84aa4a',
-    'rsrc/css/phui/phui-form-view.css' => '0efd3326',
+    'rsrc/css/phui/phui-form-view.css' => '867463b4',
     'rsrc/css/phui/phui-form.css' => 'b78ec020',
     'rsrc/css/phui/phui-header-view.css' => '5b79f0ef',
     'rsrc/css/phui/phui-icon.css' => '7a5771a9',
     'rsrc/css/phui/phui-info-panel.css' => '27ea50a1',
     'rsrc/css/phui/phui-list.css' => 'ef8035b6',
     'rsrc/css/phui/phui-object-box.css' => 'ce92d8ec',
     'rsrc/css/phui/phui-object-item-list-view.css' => 'bde610d2',
     'rsrc/css/phui/phui-pinboard-view.css' => '4b346c2a',
     'rsrc/css/phui/phui-property-list-view.css' => 'dbf53b12',
     'rsrc/css/phui/phui-remarkup-preview.css' => '19ad512b',
     'rsrc/css/phui/phui-spacing.css' => '042804d6',
     'rsrc/css/phui/phui-status.css' => '2f562399',
     'rsrc/css/phui/phui-tag-view.css' => '295d81c4',
     'rsrc/css/phui/phui-text.css' => '23e9b4b7',
     'rsrc/css/phui/phui-timeline-view.css' => 'cd93f227',
     'rsrc/css/phui/phui-workboard-view.css' => 'bf70dd2e',
     'rsrc/css/phui/phui-workpanel-view.css' => '97b69459',
     'rsrc/css/sprite-actions.css' => '969ad0e5',
     'rsrc/css/sprite-apps-large.css' => '5abf49e9',
     'rsrc/css/sprite-apps-xlarge.css' => 'db66c878',
     'rsrc/css/sprite-apps.css' => '6973a52b',
     'rsrc/css/sprite-buttonbar.css' => 'ba1c5738',
     'rsrc/css/sprite-conpherence.css' => '3b4a0487',
     'rsrc/css/sprite-docs.css' => '5f65d0da',
     'rsrc/css/sprite-gradient.css' => 'a10def53',
     'rsrc/css/sprite-icons.css' => 'f19a828c',
     'rsrc/css/sprite-login.css' => '9fbaec81',
     'rsrc/css/sprite-main-header.css' => '92720ee2',
     'rsrc/css/sprite-menu.css' => '8da53882',
     'rsrc/css/sprite-minicons.css' => 'df4f76fe',
     'rsrc/css/sprite-payments.css' => 'cc085d44',
     'rsrc/css/sprite-projects.css' => '7578fa56',
     'rsrc/css/sprite-status.css' => '8bce1c97',
     'rsrc/css/sprite-tokens.css' => '1706b943',
     'rsrc/externals/font/SourceSansPro.woff' => '44e50175',
     'rsrc/externals/font/SourceSansProBold.woff' => '8799f025',
     'rsrc/externals/javelin/core/Event.js' => '79473b62',
     'rsrc/externals/javelin/core/Stratcom.js' => 'c293f7b9',
     'rsrc/externals/javelin/core/__tests__/event-stop-and-kill.js' => '717554e4',
     'rsrc/externals/javelin/core/__tests__/install.js' => 'c432ee85',
     'rsrc/externals/javelin/core/__tests__/stratcom.js' => 'da194d4b',
     'rsrc/externals/javelin/core/__tests__/util.js' => 'd3b157a9',
     'rsrc/externals/javelin/core/init.js' => 'b88ab49e',
     'rsrc/externals/javelin/core/init_node.js' => 'd7dde471',
     'rsrc/externals/javelin/core/install.js' => '52a92793',
     'rsrc/externals/javelin/core/util.js' => '7501647b',
     'rsrc/externals/javelin/docs/Base.js' => '897bb199',
     'rsrc/externals/javelin/docs/onload.js' => '81fb4862',
     'rsrc/externals/javelin/ext/fx/Color.js' => '7e41274a',
     'rsrc/externals/javelin/ext/fx/FX.js' => '54b612ba',
     'rsrc/externals/javelin/ext/reactor/core/DynVal.js' => 'f6555212',
     'rsrc/externals/javelin/ext/reactor/core/Reactor.js' => '77b1cf6f',
     'rsrc/externals/javelin/ext/reactor/core/ReactorNode.js' => 'b4c30592',
     'rsrc/externals/javelin/ext/reactor/core/ReactorNodeCalmer.js' => '76f4ebed',
     'rsrc/externals/javelin/ext/reactor/dom/RDOM.js' => 'b6d401d6',
     'rsrc/externals/javelin/ext/view/HTMLView.js' => 'e5b406f9',
     'rsrc/externals/javelin/ext/view/View.js' => '0f764c35',
     'rsrc/externals/javelin/ext/view/ViewInterpreter.js' => '0c33c1a0',
     'rsrc/externals/javelin/ext/view/ViewPlaceholder.js' => '2fa810fc',
     'rsrc/externals/javelin/ext/view/ViewRenderer.js' => '6c2b09a2',
     'rsrc/externals/javelin/ext/view/ViewVisitor.js' => 'efe49472',
     'rsrc/externals/javelin/ext/view/__tests__/HTMLView.js' => 'f92d7bcb',
     'rsrc/externals/javelin/ext/view/__tests__/View.js' => 'bda69c40',
     'rsrc/externals/javelin/ext/view/__tests__/ViewInterpreter.js' => '7a94d6a5',
     'rsrc/externals/javelin/ext/view/__tests__/ViewRenderer.js' => '5426001c',
     'rsrc/externals/javelin/lib/Cookie.js' => '6b3dcf44',
     'rsrc/externals/javelin/lib/DOM.js' => '5054855f',
     'rsrc/externals/javelin/lib/History.js' => 'c60f4327',
     'rsrc/externals/javelin/lib/JSON.js' => '08e56a4e',
     'rsrc/externals/javelin/lib/Mask.js' => 'b9f26029',
     'rsrc/externals/javelin/lib/Request.js' => '23f9bb8d',
     'rsrc/externals/javelin/lib/Resource.js' => '356de121',
     'rsrc/externals/javelin/lib/URI.js' => 'd9a9b862',
     'rsrc/externals/javelin/lib/Vector.js' => '403a3dce',
     'rsrc/externals/javelin/lib/Workflow.js' => 'f28bf201',
     'rsrc/externals/javelin/lib/__tests__/Cookie.js' => '5ed109e8',
     'rsrc/externals/javelin/lib/__tests__/DOM.js' => 'c984504b',
     'rsrc/externals/javelin/lib/__tests__/JSON.js' => '2295d074',
     'rsrc/externals/javelin/lib/__tests__/URI.js' => '003ed329',
     'rsrc/externals/javelin/lib/__tests__/behavior.js' => '1ea62783',
     'rsrc/externals/javelin/lib/behavior.js' => '8a3ed18b',
     'rsrc/externals/javelin/lib/control/tokenizer/Tokenizer.js' => 'e7c21fb3',
     'rsrc/externals/javelin/lib/control/typeahead/Typeahead.js' => 'c54eeefb',
     'rsrc/externals/javelin/lib/control/typeahead/normalizer/TypeaheadNormalizer.js' => '5f850b5c',
     'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadCompositeSource.js' => '84f34ab1',
     'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadOnDemandSource.js' => 'a79b75a4',
     'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadPreloadedSource.js' => 'f778a573',
     'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadSource.js' => '62e18640',
     'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadStaticSource.js' => 'cdde23f1',
     'rsrc/externals/raphael/g.raphael.js' => '40dde778',
     'rsrc/externals/raphael/g.raphael.line.js' => '40da039e',
     'rsrc/externals/raphael/raphael.js' => '51ee6b43',
     'rsrc/image/BFCFDA.png' => 'd5ec91f4',
     'rsrc/image/actions/edit.png' => '2fc41442',
     'rsrc/image/apple-touch-icon.png' => '8458dda7',
     'rsrc/image/avatar.png' => '62c5f933',
     'rsrc/image/checker_dark.png' => 'd8e65881',
     'rsrc/image/checker_light.png' => 'a0155918',
     'rsrc/image/credit_cards.png' => '72b8ede8',
     'rsrc/image/darkload.gif' => '1ffd3ec6',
     'rsrc/image/divot.png' => '94dded62',
     'rsrc/image/grippy_texture.png' => 'aca81e2f',
     'rsrc/image/icon/fatcow/arrow_branch.png' => '2537c01c',
     'rsrc/image/icon/fatcow/arrow_merge.png' => '21b660e0',
     'rsrc/image/icon/fatcow/bullet_black.png' => 'ff190031',
     'rsrc/image/icon/fatcow/bullet_orange.png' => 'e273e5bb',
     'rsrc/image/icon/fatcow/bullet_red.png' => 'c0b75434',
     'rsrc/image/icon/fatcow/calendar_edit.png' => '24632275',
     'rsrc/image/icon/fatcow/document_black.png' => '45fe1c60',
     'rsrc/image/icon/fatcow/flag_blue.png' => 'a01abb1d',
     'rsrc/image/icon/fatcow/flag_finish.png' => '67825cee',
     'rsrc/image/icon/fatcow/flag_ghost.png' => '20ca8783',
     'rsrc/image/icon/fatcow/flag_green.png' => '7e0eaa7a',
     'rsrc/image/icon/fatcow/flag_orange.png' => '9e73df66',
     'rsrc/image/icon/fatcow/flag_pink.png' => '7e92f3b2',
     'rsrc/image/icon/fatcow/flag_purple.png' => 'cc517522',
     'rsrc/image/icon/fatcow/flag_red.png' => '04ec726f',
     'rsrc/image/icon/fatcow/flag_yellow.png' => '73946fd4',
     'rsrc/image/icon/fatcow/folder.png' => '95a435af',
     'rsrc/image/icon/fatcow/folder_go.png' => '001cbc94',
     'rsrc/image/icon/fatcow/key_question.png' => '52a0c26a',
     'rsrc/image/icon/fatcow/link.png' => '7afd4d5e',
     'rsrc/image/icon/fatcow/page_white_edit.png' => '39a2eed8',
     'rsrc/image/icon/fatcow/page_white_link.png' => 'a90023c7',
     'rsrc/image/icon/fatcow/page_white_put.png' => '08c95a0c',
     'rsrc/image/icon/fatcow/page_white_text.png' => '1e1f79c3',
     'rsrc/image/icon/fatcow/source/conduit.png' => '4ea01d2f',
     'rsrc/image/icon/fatcow/source/email.png' => '9bab3239',
     'rsrc/image/icon/fatcow/source/fax.png' => '04195e68',
     'rsrc/image/icon/fatcow/source/mobile.png' => 'f1321264',
     'rsrc/image/icon/fatcow/source/tablet.png' => '49396799',
     'rsrc/image/icon/fatcow/source/web.png' => '136ccb5d',
     'rsrc/image/icon/fatcow/thumbnails/default160x120.png' => 'f2e8a2eb',
     'rsrc/image/icon/fatcow/thumbnails/default60x45.png' => '0118abed',
     'rsrc/image/icon/fatcow/thumbnails/image160x120.png' => '79bb556a',
     'rsrc/image/icon/fatcow/thumbnails/image60x45.png' => 'c5e1685e',
     'rsrc/image/icon/fatcow/thumbnails/pdf160x120.png' => 'ac9edbf5',
     'rsrc/image/icon/fatcow/thumbnails/pdf60x45.png' => 'c0db4143',
     'rsrc/image/icon/fatcow/thumbnails/zip160x120.png' => '75f9cd0f',
     'rsrc/image/icon/fatcow/thumbnails/zip60x45.png' => 'af11bf3e',
     'rsrc/image/icon/lightbox/close-2.png' => 'cc40e7c8',
     'rsrc/image/icon/lightbox/close-hover-2.png' => 'fb5d6d9e',
     'rsrc/image/icon/lightbox/left-arrow-2.png' => '8426133b',
     'rsrc/image/icon/lightbox/left-arrow-hover-2.png' => '701e5ee3',
     'rsrc/image/icon/lightbox/right-arrow-2.png' => '6d5519a0',
     'rsrc/image/icon/lightbox/right-arrow-hover-2.png' => '3a04aa21',
     'rsrc/image/icon/subscribe.png' => 'd03ed5a5',
     'rsrc/image/icon/tango/attachment.png' => 'ecc8022e',
     'rsrc/image/icon/tango/edit.png' => '929a1363',
     'rsrc/image/icon/tango/go-down.png' => '96d95e43',
     'rsrc/image/icon/tango/log.png' => 'b08cc63a',
     'rsrc/image/icon/tango/upload.png' => '7bbb7984',
     'rsrc/image/icon/unsubscribe.png' => '25725013',
     'rsrc/image/lightblue-header.png' => '5c168b6d',
     'rsrc/image/loading.gif' => '75d384cc',
     'rsrc/image/loading/boating_24.gif' => '5c90f086',
     'rsrc/image/loading/compass_24.gif' => 'b36b4f46',
     'rsrc/image/loading/loading_24.gif' => '26bc9adc',
     'rsrc/image/loading/loading_48.gif' => '6a4994c7',
     'rsrc/image/loading/loading_d48.gif' => 'cdcbe900',
     'rsrc/image/loading/loading_w24.gif' => '7662fa2b',
     'rsrc/image/main_texture.png' => '29a2c5ad',
     'rsrc/image/menu_texture.png' => '5a17580d',
     'rsrc/image/people/harding.png' => '45aa614e',
     'rsrc/image/people/jefferson.png' => 'afca0e53',
     'rsrc/image/people/lincoln.png' => '9369126d',
     'rsrc/image/people/mckinley.png' => 'fb8f16ce',
     'rsrc/image/people/taft.png' => 'd7bc402c',
     'rsrc/image/people/washington.png' => '40dd301c',
     'rsrc/image/phrequent_active.png' => 'a466a8ed',
     'rsrc/image/phrequent_inactive.png' => 'bfc15a69',
     'rsrc/image/search-white.png' => '64cc0d45',
     'rsrc/image/search.png' => '82625a7e',
     'rsrc/image/sprite-actions-X2.png' => '7dfd5652',
     'rsrc/image/sprite-actions.png' => '2ddd18c3',
     'rsrc/image/sprite-apps-X2.png' => 'c091b2d3',
     'rsrc/image/sprite-apps-large-X2.png' => 'e1396a83',
     'rsrc/image/sprite-apps-large.png' => '48cef7bd',
     'rsrc/image/sprite-apps-xlarge.png' => 'a751a580',
     'rsrc/image/sprite-apps.png' => '4f788e21',
     'rsrc/image/sprite-buttonbar-X2.png' => '2c09a184',
     'rsrc/image/sprite-buttonbar.png' => 'e98e96af',
     'rsrc/image/sprite-conpherence-X2.png' => 'cd2d08d7',
     'rsrc/image/sprite-conpherence.png' => 'a5ab2eb7',
     'rsrc/image/sprite-docs-X2.png' => '6dc1adad',
     'rsrc/image/sprite-docs.png' => '4636297f',
     'rsrc/image/sprite-gradient.png' => '4ece0b62',
     'rsrc/image/sprite-icons-X2.png' => '0d5867c0',
     'rsrc/image/sprite-icons.png' => '3f754bda',
     'rsrc/image/sprite-login-X2.png' => '81c1344f',
     'rsrc/image/sprite-login.png' => '7c729508',
     'rsrc/image/sprite-main-header.png' => '83521873',
     'rsrc/image/sprite-menu-X2.png' => '949974c6',
     'rsrc/image/sprite-menu.png' => '307d5da0',
     'rsrc/image/sprite-minicons-X2.png' => '55377e4e',
     'rsrc/image/sprite-minicons.png' => '272644ea',
     'rsrc/image/sprite-payments.png' => 'd8576309',
     'rsrc/image/sprite-projects-X2.png' => '218fdc8b',
     'rsrc/image/sprite-projects.png' => '631ff9a7',
     'rsrc/image/sprite-status-X2.png' => '82445ee0',
     'rsrc/image/sprite-status.png' => '926a896a',
     'rsrc/image/sprite-tokens-X2.png' => 'b4776580',
     'rsrc/image/sprite-tokens.png' => '25b75533',
     'rsrc/image/texture/card-gradient.png' => '815f26e8',
     'rsrc/image/texture/dark-menu-hover.png' => '5fa7ece8',
     'rsrc/image/texture/dark-menu.png' => '7e22296e',
     'rsrc/image/texture/grip.png' => '719404f3',
     'rsrc/image/texture/panel-header-gradient.png' => 'e3b8dcfe',
     'rsrc/image/texture/phlnx-bg.png' => '8d819209',
     'rsrc/image/texture/pholio-background.gif' => 'ba29239c',
     'rsrc/image/texture/table_header.png' => '5c433037',
     'rsrc/image/texture/table_header_hover.png' => '038ec3b9',
     'rsrc/image/texture/table_header_tall.png' => 'd56b434f',
     'rsrc/js/application/aphlict/Aphlict.js' => '493665ee',
     'rsrc/js/application/aphlict/behavior-aphlict-dropdown.js' => '2a2dba85',
     'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => '845731b8',
     'rsrc/js/application/auth/behavior-persona-login.js' => '9414ff18',
     'rsrc/js/application/config/behavior-reorder-fields.js' => '938aed89',
     'rsrc/js/application/conpherence/behavior-menu.js' => '7ee23816',
     'rsrc/js/application/conpherence/behavior-pontificate.js' => '53f6f2dd',
     'rsrc/js/application/conpherence/behavior-widget-pane.js' => 'd8ef8659',
     'rsrc/js/application/countdown/timer.js' => '889c96f3',
     'rsrc/js/application/differential/DifferentialInlineCommentEditor.js' => 'f2441746',
     'rsrc/js/application/differential/behavior-add-reviewers-and-ccs.js' => '533a187b',
     'rsrc/js/application/differential/behavior-comment-jump.js' => '71755c79',
     'rsrc/js/application/differential/behavior-comment-preview.js' => '127f2018',
     'rsrc/js/application/differential/behavior-diff-radios.js' => 'e1ff79b1',
     'rsrc/js/application/differential/behavior-dropdown-menus.js' => '5f004630',
     'rsrc/js/application/differential/behavior-edit-inline-comments.js' => '00861799',
     'rsrc/js/application/differential/behavior-keyboard-nav.js' => '173ce7e7',
     'rsrc/js/application/differential/behavior-populate.js' => 'ce0c217a',
     'rsrc/js/application/differential/behavior-show-all-comments.js' => '7c273581',
     'rsrc/js/application/differential/behavior-show-field-details.js' => '441f2137',
     'rsrc/js/application/differential/behavior-show-more.js' => 'dd7e8ef5',
     'rsrc/js/application/differential/behavior-toggle-files.js' => 'ca3f91eb',
     'rsrc/js/application/differential/behavior-user-select.js' => 'a8d8459d',
     'rsrc/js/application/diffusion/behavior-audit-preview.js' => 'be81801d',
     'rsrc/js/application/diffusion/behavior-commit-branches.js' => 'bdaf4d04',
     'rsrc/js/application/diffusion/behavior-commit-graph.js' => 'f7f1289f',
     'rsrc/js/application/diffusion/behavior-jump-to.js' => '9db3d160',
     'rsrc/js/application/diffusion/behavior-load-blame.js' => '42126667',
     'rsrc/js/application/diffusion/behavior-pull-lastmodified.js' => '75903ee1',
     'rsrc/js/application/doorkeeper/behavior-doorkeeper-tag.js' => 'e5822781',
     'rsrc/js/application/files/behavior-icon-composer.js' => '8ef9ab58',
     'rsrc/js/application/files/behavior-launch-icon-composer.js' => '48086888',
     'rsrc/js/application/harbormaster/behavior-reorder-steps.js' => '957a7fde',
     'rsrc/js/application/herald/HeraldRuleEditor.js' => '4173dbd8',
     'rsrc/js/application/herald/PathTypeahead.js' => 'f7fc67ec',
     'rsrc/js/application/herald/herald-rule-editor.js' => '7ebaeed3',
     'rsrc/js/application/maniphest/behavior-batch-editor.js' => 'fe80fb6d',
     'rsrc/js/application/maniphest/behavior-batch-selector.js' => 'ead554ec',
     'rsrc/js/application/maniphest/behavior-line-chart.js' => '64ef2fd2',
     'rsrc/js/application/maniphest/behavior-list-edit.js' => 'cf76cfd5',
     'rsrc/js/application/maniphest/behavior-subpriorityeditor.js' => '84845b5b',
     'rsrc/js/application/maniphest/behavior-transaction-controls.js' => 'dddd43ac',
     'rsrc/js/application/maniphest/behavior-transaction-expand.js' => '2f2e18aa',
     'rsrc/js/application/maniphest/behavior-transaction-preview.js' => 'f8248bc5',
     'rsrc/js/application/owners/OwnersPathEditor.js' => '46efd18e',
     'rsrc/js/application/owners/owners-path-editor.js' => '7a68dda3',
     'rsrc/js/application/passphrase/phame-credential-control.js' => '1e1c8a59',
     'rsrc/js/application/phame/phame-post-preview.js' => '61d927ec',
     'rsrc/js/application/pholio/behavior-pholio-mock-edit.js' => '1e1e8bb0',
     'rsrc/js/application/pholio/behavior-pholio-mock-view.js' => '28497740',
     'rsrc/js/application/phortune/behavior-balanced-payment-form.js' => '3b3e1664',
     'rsrc/js/application/phortune/behavior-stripe-payment-form.js' => '1693a296',
     'rsrc/js/application/phortune/behavior-test-payment-form.js' => 'b3e5ee60',
     'rsrc/js/application/phortune/phortune-credit-card-form.js' => '2290aeef',
     'rsrc/js/application/policy/behavior-policy-control.js' => 'c01153ea',
     'rsrc/js/application/policy/behavior-policy-rule-editor.js' => '263aeb8c',
     'rsrc/js/application/ponder/behavior-votebox.js' => '327dbe61',
     'rsrc/js/application/projects/behavior-project-boards.js' => '04c59172',
     'rsrc/js/application/projects/behavior-project-create.js' => '065227cc',
     'rsrc/js/application/releeph/releeph-preview-branch.js' => '9eb2cedb',
     'rsrc/js/application/releeph/releeph-request-state-change.js' => 'fe7fc914',
     'rsrc/js/application/releeph/releeph-request-typeahead.js' => 'cd9e7094',
     'rsrc/js/application/repository/repository-crossreference.js' => '8ab282be',
     'rsrc/js/application/search/behavior-reorder-queries.js' => '37871df4',
     'rsrc/js/application/slowvote/behavior-slowvote-embed.js' => 'a51fdb2e',
     'rsrc/js/application/transactions/behavior-transaction-comment-form.js' => '9084a36f',
     'rsrc/js/application/transactions/behavior-transaction-list.js' => '3c918aa8',
     'rsrc/js/application/uiexample/JavelinViewExample.js' => 'd4a14807',
     'rsrc/js/application/uiexample/ReactorButtonExample.js' => '44524435',
     'rsrc/js/application/uiexample/ReactorCheckboxExample.js' => '7ba325ee',
     'rsrc/js/application/uiexample/ReactorFocusExample.js' => '82f568cd',
     'rsrc/js/application/uiexample/ReactorInputExample.js' => 'd6ca6b1c',
     'rsrc/js/application/uiexample/ReactorMouseoverExample.js' => '4e37e4de',
     'rsrc/js/application/uiexample/ReactorRadioExample.js' => '858f9728',
     'rsrc/js/application/uiexample/ReactorSelectExample.js' => '189e4fe3',
     'rsrc/js/application/uiexample/ReactorSendClassExample.js' => 'bf97561d',
     'rsrc/js/application/uiexample/ReactorSendPropertiesExample.js' => '551add57',
     'rsrc/js/application/uiexample/busy-example.js' => 'fbbce3bf',
     'rsrc/js/application/uiexample/gesture-example.js' => 'f42bb8c6',
     'rsrc/js/application/uiexample/notification-example.js' => 'c51a6616',
     'rsrc/js/core/Busy.js' => '6453c869',
     'rsrc/js/core/DragAndDropFileUpload.js' => 'ae6abfba',
     'rsrc/js/core/DraggableList.js' => '1681c4d4',
     'rsrc/js/core/DropdownMenu.js' => 'fb342e18',
     'rsrc/js/core/DropdownMenuItem.js' => '0f386ef4',
     'rsrc/js/core/FileUpload.js' => 'a4ae61bf',
     'rsrc/js/core/Hovercard.js' => '4f344388',
     'rsrc/js/core/KeyboardShortcut.js' => '1ae869f2',
     'rsrc/js/core/KeyboardShortcutManager.js' => 'ad7a69ca',
     'rsrc/js/core/MultirowRowManager.js' => '50395a1b',
     'rsrc/js/core/Notification.js' => '0c6946e7',
     'rsrc/js/core/Prefab.js' => '0326e5d0',
     'rsrc/js/core/ShapedRequest.js' => 'dfa181a4',
     'rsrc/js/core/TextAreaUtils.js' => 'b3ec3cfc',
     'rsrc/js/core/ToolTip.js' => '0a81ea29',
     'rsrc/js/core/behavior-active-nav.js' => 'c81bc98f',
     'rsrc/js/core/behavior-audio-source.js' => '59b251eb',
     'rsrc/js/core/behavior-autofocus.js' => '7319e029',
     'rsrc/js/core/behavior-crop.js' => 'b98fc918',
     'rsrc/js/core/behavior-dark-console.js' => 'e9fdb5e5',
     'rsrc/js/core/behavior-device.js' => '03d6ed07',
     'rsrc/js/core/behavior-drag-and-drop-textarea.js' => '4a11ea9c',
     'rsrc/js/core/behavior-error-log.js' => 'a5d7cf86',
     'rsrc/js/core/behavior-fancy-datepicker.js' => '5d584426',
     'rsrc/js/core/behavior-file-tree.js' => 'c8728c70',
     'rsrc/js/core/behavior-form.js' => '27d4da3f',
     'rsrc/js/core/behavior-gesture.js' => 'fe2e0ba4',
     'rsrc/js/core/behavior-global-drag-and-drop.js' => '8fd76bab',
     'rsrc/js/core/behavior-history-install.js' => '7ee2b591',
     'rsrc/js/core/behavior-hovercard.js' => '9c808199',
     'rsrc/js/core/behavior-keyboard-pager.js' => 'b657bdf8',
     'rsrc/js/core/behavior-keyboard-shortcuts.js' => 'd75709e6',
     'rsrc/js/core/behavior-konami.js' => '5bc2cb21',
     'rsrc/js/core/behavior-lightbox-attachments.js' => '3aa45ad9',
     'rsrc/js/core/behavior-line-linker.js' => 'bc778103',
     'rsrc/js/core/behavior-more.js' => '9b9197be',
     'rsrc/js/core/behavior-object-selector.js' => 'b4eef37b',
     'rsrc/js/core/behavior-oncopy.js' => 'dab9253e',
     'rsrc/js/core/behavior-phabricator-nav.js' => 'b5842a5e',
     'rsrc/js/core/behavior-phabricator-remarkup-assist.js' => 'c021950a',
     'rsrc/js/core/behavior-refresh-csrf.js' => 'c4b31646',
     'rsrc/js/core/behavior-remarkup-preview.js' => 'f7379f45',
     'rsrc/js/core/behavior-reveal-content.js' => '8f24abfc',
     'rsrc/js/core/behavior-search-typeahead.js' => 'f6b56f7a',
     'rsrc/js/core/behavior-select-on-click.js' => '0e34ca02',
     'rsrc/js/core/behavior-toggle-class.js' => 'a82a7769',
     'rsrc/js/core/behavior-tokenizer.js' => 'b3a4b884',
     'rsrc/js/core/behavior-tooltip.js' => '48db4145',
     'rsrc/js/core/behavior-watch-anchor.js' => '06e05112',
-    'rsrc/js/core/behavior-workflow.js' => '82947dda',
+    'rsrc/js/core/behavior-workflow.js' => 'fee00761',
     'rsrc/js/core/phtize.js' => 'd254d646',
     'rsrc/js/phui/behavior-phui-object-box-tabs.js' => 'a3e2244e',
     'rsrc/swf/aphlict.swf' => 'abac967d',
   ),
   'symbols' =>
   array(
     'aphront-bars' => '231ac33c',
     'aphront-contextbar-view-css' => '1c3b0529',
     'aphront-dark-console-css' => '6378ef3d',
     'aphront-dialog-view-css' => 'c01d24b4',
     'aphront-error-view-css' => '16cd9949',
     'aphront-list-filter-view-css' => 'ef989c67',
     'aphront-multi-column-view-css' => '12f65921',
     'aphront-notes' => '6acadd3f',
     'aphront-pager-view-css' => '2e3539af',
     'aphront-panel-view-css' => '5846dfa2',
     'aphront-request-failure-view-css' => 'da14df31',
     'aphront-table-view-css' => 'de599000',
     'aphront-tokenizer-control-css' => '36903077',
     'aphront-tooltip-css' => '9c90229d',
     'aphront-two-column-view-css' => '16ab3ad2',
     'aphront-typeahead-control-css' => '271456a1',
     'auth-css' => '1e655982',
     'config-options-css' => '7fedf08b',
     'conpherence-menu-css' => '561348ac',
     'conpherence-message-pane-css' => '2aedca89',
     'conpherence-notification-css' => '403cf598',
     'conpherence-update-css' => '1099a660',
     'conpherence-widget-pane-css' => '87b12e0c',
     'differential-changeset-view-css' => 'e710a360',
     'differential-core-view-css' => '7ac3cabc',
     'differential-inline-comment-editor' => 'f2441746',
     'differential-local-commits-view-css' => '19649019',
     'differential-results-table-css' => '239924f9',
     'differential-revision-add-comment-css' => 'c478bcaa',
     'differential-revision-comment-css' => '48186045',
     'differential-revision-history-css' => '0e8eb855',
     'differential-revision-list-css' => 'f3c47d33',
     'differential-table-of-contents-css' => '19566f76',
     'diffusion-commit-view-css' => '92d1e8f9',
     'diffusion-icons-css' => '384a0f7d',
     'diffusion-source-css' => '66fdf661',
     'diviner-shared-css' => '38813222',
     'font-source-sans-pro' => '225851dd',
     'global-drag-and-drop-css' => '697324ad',
     'herald-css' => '59d48f01',
     'herald-rule-editor' => '4173dbd8',
     'herald-test-css' => '2b7d0f54',
     'inline-comment-summary-css' => '14a91639',
     'javelin-aphlict' => '493665ee',
     'javelin-behavior' => '8a3ed18b',
     'javelin-behavior-aphlict-dropdown' => '2a2dba85',
     'javelin-behavior-aphlict-listen' => '845731b8',
     'javelin-behavior-aphront-basic-tokenizer' => 'b3a4b884',
     'javelin-behavior-aphront-crop' => 'b98fc918',
     'javelin-behavior-aphront-drag-and-drop-textarea' => '4a11ea9c',
     'javelin-behavior-aphront-form-disable-on-submit' => '27d4da3f',
     'javelin-behavior-aphront-more' => '9b9197be',
     'javelin-behavior-audio-source' => '59b251eb',
     'javelin-behavior-audit-preview' => 'be81801d',
     'javelin-behavior-balanced-payment-form' => '3b3e1664',
     'javelin-behavior-config-reorder-fields' => '938aed89',
     'javelin-behavior-conpherence-menu' => '7ee23816',
     'javelin-behavior-conpherence-pontificate' => '53f6f2dd',
     'javelin-behavior-conpherence-widget-pane' => 'd8ef8659',
     'javelin-behavior-countdown-timer' => '889c96f3',
     'javelin-behavior-dark-console' => 'e9fdb5e5',
     'javelin-behavior-device' => '03d6ed07',
     'javelin-behavior-differential-add-reviewers-and-ccs' => '533a187b',
     'javelin-behavior-differential-comment-jump' => '71755c79',
     'javelin-behavior-differential-diff-radios' => 'e1ff79b1',
     'javelin-behavior-differential-dropdown-menus' => '5f004630',
     'javelin-behavior-differential-edit-inline-comments' => '00861799',
     'javelin-behavior-differential-feedback-preview' => '127f2018',
     'javelin-behavior-differential-keyboard-navigation' => '173ce7e7',
     'javelin-behavior-differential-populate' => 'ce0c217a',
     'javelin-behavior-differential-show-field-details' => '441f2137',
     'javelin-behavior-differential-show-more' => 'dd7e8ef5',
     'javelin-behavior-differential-toggle-files' => 'ca3f91eb',
     'javelin-behavior-differential-user-select' => 'a8d8459d',
     'javelin-behavior-diffusion-commit-branches' => 'bdaf4d04',
     'javelin-behavior-diffusion-commit-graph' => 'f7f1289f',
     'javelin-behavior-diffusion-jump-to' => '9db3d160',
     'javelin-behavior-diffusion-pull-lastmodified' => '75903ee1',
     'javelin-behavior-doorkeeper-tag' => 'e5822781',
     'javelin-behavior-error-log' => 'a5d7cf86',
     'javelin-behavior-fancy-datepicker' => '5d584426',
     'javelin-behavior-global-drag-and-drop' => '8fd76bab',
     'javelin-behavior-harbormaster-reorder-steps' => '957a7fde',
     'javelin-behavior-herald-rule-editor' => '7ebaeed3',
     'javelin-behavior-history-install' => '7ee2b591',
     'javelin-behavior-icon-composer' => '8ef9ab58',
     'javelin-behavior-konami' => '5bc2cb21',
     'javelin-behavior-launch-icon-composer' => '48086888',
     'javelin-behavior-lightbox-attachments' => '3aa45ad9',
     'javelin-behavior-line-chart' => '64ef2fd2',
     'javelin-behavior-load-blame' => '42126667',
     'javelin-behavior-maniphest-batch-editor' => 'fe80fb6d',
     'javelin-behavior-maniphest-batch-selector' => 'ead554ec',
     'javelin-behavior-maniphest-list-editor' => 'cf76cfd5',
     'javelin-behavior-maniphest-subpriority-editor' => '84845b5b',
     'javelin-behavior-maniphest-transaction-controls' => 'dddd43ac',
     'javelin-behavior-maniphest-transaction-expand' => '2f2e18aa',
     'javelin-behavior-maniphest-transaction-preview' => 'f8248bc5',
     'javelin-behavior-owners-path-editor' => '7a68dda3',
     'javelin-behavior-passphrase-credential-control' => '1e1c8a59',
     'javelin-behavior-persona-login' => '9414ff18',
     'javelin-behavior-phabricator-active-nav' => 'c81bc98f',
     'javelin-behavior-phabricator-autofocus' => '7319e029',
     'javelin-behavior-phabricator-busy-example' => 'fbbce3bf',
     'javelin-behavior-phabricator-file-tree' => 'c8728c70',
     'javelin-behavior-phabricator-gesture' => 'fe2e0ba4',
     'javelin-behavior-phabricator-gesture-example' => 'f42bb8c6',
     'javelin-behavior-phabricator-hovercards' => '9c808199',
     'javelin-behavior-phabricator-keyboard-pager' => 'b657bdf8',
     'javelin-behavior-phabricator-keyboard-shortcuts' => 'd75709e6',
     'javelin-behavior-phabricator-line-linker' => 'bc778103',
     'javelin-behavior-phabricator-nav' => 'b5842a5e',
     'javelin-behavior-phabricator-notification-example' => 'c51a6616',
     'javelin-behavior-phabricator-object-selector' => 'b4eef37b',
     'javelin-behavior-phabricator-oncopy' => 'dab9253e',
     'javelin-behavior-phabricator-remarkup-assist' => 'c021950a',
     'javelin-behavior-phabricator-reveal-content' => '8f24abfc',
     'javelin-behavior-phabricator-search-typeahead' => 'f6b56f7a',
     'javelin-behavior-phabricator-show-all-transactions' => '7c273581',
     'javelin-behavior-phabricator-tooltips' => '48db4145',
     'javelin-behavior-phabricator-transaction-comment-form' => '9084a36f',
     'javelin-behavior-phabricator-transaction-list' => '3c918aa8',
     'javelin-behavior-phabricator-watch-anchor' => '06e05112',
     'javelin-behavior-phame-post-preview' => '61d927ec',
     'javelin-behavior-pholio-mock-edit' => '1e1e8bb0',
     'javelin-behavior-pholio-mock-view' => '28497740',
     'javelin-behavior-phui-object-box-tabs' => 'a3e2244e',
     'javelin-behavior-policy-control' => 'c01153ea',
     'javelin-behavior-policy-rule-editor' => '263aeb8c',
     'javelin-behavior-ponder-votebox' => '327dbe61',
     'javelin-behavior-project-boards' => '04c59172',
     'javelin-behavior-project-create' => '065227cc',
     'javelin-behavior-refresh-csrf' => 'c4b31646',
     'javelin-behavior-releeph-preview-branch' => '9eb2cedb',
     'javelin-behavior-releeph-request-state-change' => 'fe7fc914',
     'javelin-behavior-releeph-request-typeahead' => 'cd9e7094',
     'javelin-behavior-remarkup-preview' => 'f7379f45',
     'javelin-behavior-repository-crossreference' => '8ab282be',
     'javelin-behavior-search-reorder-queries' => '37871df4',
     'javelin-behavior-select-on-click' => '0e34ca02',
     'javelin-behavior-slowvote-embed' => 'a51fdb2e',
     'javelin-behavior-stripe-payment-form' => '1693a296',
     'javelin-behavior-test-payment-form' => 'b3e5ee60',
     'javelin-behavior-toggle-class' => 'a82a7769',
     'javelin-behavior-view-placeholder' => '2fa810fc',
-    'javelin-behavior-workflow' => '82947dda',
+    'javelin-behavior-workflow' => 'fee00761',
     'javelin-color' => '7e41274a',
     'javelin-cookie' => '6b3dcf44',
     'javelin-dom' => '5054855f',
     'javelin-dynval' => 'f6555212',
     'javelin-event' => '79473b62',
     'javelin-fx' => '54b612ba',
     'javelin-history' => 'c60f4327',
     'javelin-install' => '52a92793',
     'javelin-json' => '08e56a4e',
     'javelin-magical-init' => 'b88ab49e',
     'javelin-mask' => 'b9f26029',
     'javelin-reactor' => '77b1cf6f',
     'javelin-reactor-dom' => 'b6d401d6',
     'javelin-reactor-node-calmer' => '76f4ebed',
     'javelin-reactornode' => 'b4c30592',
     'javelin-request' => '23f9bb8d',
     'javelin-resource' => '356de121',
     'javelin-stratcom' => 'c293f7b9',
     'javelin-tokenizer' => 'e7c21fb3',
     'javelin-typeahead' => 'c54eeefb',
     'javelin-typeahead-composite-source' => '84f34ab1',
     'javelin-typeahead-normalizer' => '5f850b5c',
     'javelin-typeahead-ondemand-source' => 'a79b75a4',
     'javelin-typeahead-preloaded-source' => 'f778a573',
     'javelin-typeahead-source' => '62e18640',
     'javelin-typeahead-static-source' => 'cdde23f1',
     'javelin-uri' => 'd9a9b862',
     'javelin-util' => '7501647b',
     'javelin-vector' => '403a3dce',
     'javelin-view' => '0f764c35',
     'javelin-view-html' => 'e5b406f9',
     'javelin-view-interpreter' => '0c33c1a0',
     'javelin-view-renderer' => '6c2b09a2',
     'javelin-view-visitor' => 'efe49472',
     'javelin-workflow' => 'f28bf201',
     'lightbox-attachment-css' => '7acac05d',
     'maniphest-batch-editor' => '8f380ebc',
     'maniphest-report-css' => '6fc16517',
     'maniphest-task-edit-css' => '8e23031b',
     'maniphest-task-summary-css' => '6df1a768',
     'multirow-row-manager' => '50395a1b',
     'owners-path-editor' => '46efd18e',
     'owners-path-editor-css' => '2f00933b',
     'paste-css' => 'aa1767d1',
     'path-typeahead' => 'f7fc67ec',
     'people-profile-css' => 'ba7b2762',
     'phabricator-action-header-view-css' => 'c14dfc57',
     'phabricator-action-list-view-css' => '81383e25',
     'phabricator-application-launch-view-css' => '5cb75f67',
     'phabricator-busy' => '6453c869',
     'phabricator-chatlog-css' => '852140ff',
     'phabricator-content-source-view-css' => '4b8b05d4',
     'phabricator-core-css' => 'da26ddb2',
     'phabricator-countdown-css' => '86b7b0a0',
     'phabricator-crumbs-view-css' => '2d9db584',
     'phabricator-drag-and-drop-file-upload' => 'ae6abfba',
     'phabricator-draggable-list' => '1681c4d4',
     'phabricator-dropdown-menu' => 'fb342e18',
     'phabricator-fatal-config-template-css' => '25d446d6',
     'phabricator-feed-css' => '0d17c209',
     'phabricator-file-upload' => 'a4ae61bf',
     'phabricator-filetree-view-css' => 'a8c86ace',
     'phabricator-flag-css' => '5337623f',
     'phabricator-hovercard' => '4f344388',
     'phabricator-hovercard-view-css' => '46a13cf0',
     'phabricator-jump-nav' => 'f0c5e726',
     'phabricator-keyboard-shortcut' => '1ae869f2',
     'phabricator-keyboard-shortcut-manager' => 'ad7a69ca',
     'phabricator-main-menu-view' => 'd36e0c11',
     'phabricator-menu-item' => '0f386ef4',
     'phabricator-nav-view-css' => '80e60fc1',
     'phabricator-notification' => '0c6946e7',
     'phabricator-notification-css' => '6901121e',
     'phabricator-notification-menu-css' => 'fc9a363c',
     'phabricator-object-selector-css' => '029a133d',
     'phabricator-phtize' => 'd254d646',
     'phabricator-prefab' => '0326e5d0',
     'phabricator-profile-css' => '9bdb9804',
     'phabricator-project-tag-css' => '095c9404',
     'phabricator-remarkup-css' => '0923dbd6',
     'phabricator-search-results-css' => 'f240504c',
     'phabricator-settings-css' => 'ea8f5915',
     'phabricator-shaped-request' => 'dfa181a4',
     'phabricator-side-menu-view-css' => '503699d0',
     'phabricator-slowvote-css' => '266df6a1',
     'phabricator-source-code-view-css' => '62a99814',
     'phabricator-standard-page-view' => '517cdfb1',
     'phabricator-textareautils' => 'b3ec3cfc',
     'phabricator-tooltip' => '0a81ea29',
     'phabricator-transaction-view-css' => 'ce491938',
     'phabricator-ui-example-css' => '4741b891',
     'phabricator-uiexample-javelin-view' => 'd4a14807',
     'phabricator-uiexample-reactor-button' => '44524435',
     'phabricator-uiexample-reactor-checkbox' => '7ba325ee',
     'phabricator-uiexample-reactor-focus' => '82f568cd',
     'phabricator-uiexample-reactor-input' => 'd6ca6b1c',
     'phabricator-uiexample-reactor-mouseover' => '4e37e4de',
     'phabricator-uiexample-reactor-radio' => '858f9728',
     'phabricator-uiexample-reactor-select' => '189e4fe3',
     'phabricator-uiexample-reactor-sendclass' => 'bf97561d',
     'phabricator-uiexample-reactor-sendproperties' => '551add57',
     'phabricator-zindex-css' => '0fd29d49',
     'phame-css' => '450826e1',
     'pholio-css' => 'd23ace50',
     'pholio-edit-css' => 'b9e59b6d',
     'pholio-inline-comments-css' => '52be33f0',
     'phortune-credit-card-form' => '2290aeef',
     'phortune-credit-card-form-css' => 'b25b4beb',
     'phrequent-css' => 'ffc185ad',
     'phriction-document-css' => 'b0309d8e',
     'phui-box-css' => 'a36cf3a5',
     'phui-button-css' => '8784a966',
     'phui-calendar-css' => '5e1ad989',
     'phui-calendar-day-css' => 'de035c8a',
     'phui-calendar-list-css' => 'c1d0ca59',
     'phui-calendar-month-css' => '5e762971',
     'phui-document-view-css' => '10f59385',
     'phui-feed-story-css' => '3a59c2cf',
     'phui-fontkit-css' => 'de84aa4a',
     'phui-form-css' => 'b78ec020',
-    'phui-form-view-css' => '0efd3326',
+    'phui-form-view-css' => '867463b4',
     'phui-header-view-css' => '5b79f0ef',
     'phui-icon-view-css' => '7a5771a9',
     'phui-info-panel-css' => '27ea50a1',
     'phui-list-view-css' => 'ef8035b6',
     'phui-object-box-css' => 'ce92d8ec',
     'phui-object-item-list-view-css' => 'bde610d2',
     'phui-pinboard-view-css' => '4b346c2a',
     'phui-property-list-view-css' => 'dbf53b12',
     'phui-remarkup-preview-css' => '19ad512b',
     'phui-spacing-css' => '042804d6',
     'phui-status-list-view-css' => '2f562399',
     'phui-tag-view-css' => '295d81c4',
     'phui-text-css' => '23e9b4b7',
     'phui-timeline-view-css' => 'cd93f227',
     'phui-workboard-view-css' => 'bf70dd2e',
     'phui-workpanel-view-css' => '97b69459',
     'policy-css' => '957ea14c',
     'policy-edit-css' => '05cca26a',
     'ponder-comment-table-css' => '6cdccea7',
     'ponder-feed-view-css' => 'e62615b6',
     'ponder-post-css' => 'ebab8a70',
     'ponder-vote-css' => '8ed6ed8b',
     'raphael-core' => '51ee6b43',
     'raphael-g' => '40dde778',
     'raphael-g-line' => '40da039e',
     'releeph-branch' => 'b8821d2d',
     'releeph-colors' => '2d2d6aa8',
     'releeph-core' => '140b959d',
     'releeph-intents' => '7364ac97',
     'releeph-preview-branch' => '0e383ca3',
     'releeph-project' => 'ee1f9f57',
     'releeph-request-differential-create-dialog' => '8d8b92cd',
     'releeph-request-typeahead-css' => '667a48ae',
     'releeph-status' => 'a20631d9',
     'setup-issue-css' => '69e640e7',
     'sprite-actions-css' => '969ad0e5',
     'sprite-apps-css' => '6973a52b',
     'sprite-apps-large-css' => '5abf49e9',
     'sprite-apps-xlarge-css' => 'db66c878',
     'sprite-buttonbar-css' => 'ba1c5738',
     'sprite-conpherence-css' => '3b4a0487',
     'sprite-docs-css' => '5f65d0da',
     'sprite-gradient-css' => 'a10def53',
     'sprite-icons-css' => 'f19a828c',
     'sprite-login-css' => '9fbaec81',
     'sprite-main-header-css' => '92720ee2',
     'sprite-menu-css' => '8da53882',
     'sprite-minicons-css' => 'df4f76fe',
     'sprite-payments-css' => 'cc085d44',
     'sprite-projects-css' => '7578fa56',
     'sprite-status-css' => '8bce1c97',
     'sprite-tokens-css' => '1706b943',
     'subscribers-list-css' => '5bb30c78',
     'syntax-highlighting-css' => '3c18c1cb',
     'tokens-css' => 'fb286311',
   ),
   'requires' =>
   array(
     '00861799' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-util',
       4 => 'javelin-vector',
       5 => 'differential-inline-comment-editor',
     ),
     '029a133d' =>
     array(
       0 => 'aphront-dialog-view-css',
     ),
     '0326e5d0' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-typeahead',
       4 => 'javelin-tokenizer',
       5 => 'javelin-typeahead-preloaded-source',
       6 => 'javelin-typeahead-ondemand-source',
       7 => 'javelin-dom',
       8 => 'javelin-stratcom',
       9 => 'javelin-util',
     ),
     '03d6ed07' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
       4 => 'javelin-install',
     ),
     '04c59172' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-stratcom',
       4 => 'javelin-workflow',
       5 => 'phabricator-draggable-list',
     ),
     '065227cc' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-workflow',
     ),
     '06e05112' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
     ),
     '08e56a4e' =>
     array(
       0 => 'javelin-install',
     ),
     '0a81ea29' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
     ),
     '0c33c1a0' =>
     array(
       0 => 'javelin-view',
       1 => 'javelin-install',
       2 => 'javelin-dom',
     ),
     '0c6946e7' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-util',
       4 => 'phabricator-notification-css',
     ),
     '0e34ca02' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     '0f386ef4' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
     ),
     '0f764c35' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     '127f2018' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-request',
       4 => 'javelin-util',
       5 => 'phabricator-shaped-request',
     ),
     '1681c4d4' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-util',
       4 => 'javelin-vector',
       5 => 'javelin-magical-init',
     ),
     '1693a296' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phortune-credit-card-form',
     ),
     '173ce7e7' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'phabricator-keyboard-shortcut',
     ),
     '189e4fe3' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     '1ae869f2' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'phabricator-keyboard-shortcut-manager',
     ),
     '1e1c8a59' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-workflow',
       4 => 'javelin-util',
       5 => 'javelin-uri',
     ),
     '1e1e8bb0' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-workflow',
       4 => 'phabricator-phtize',
       5 => 'phabricator-drag-and-drop-file-upload',
       6 => 'phabricator-draggable-list',
     ),
     '2290aeef' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-json',
       3 => 'javelin-workflow',
       4 => 'javelin-util',
     ),
     '23f9bb8d' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-stratcom',
       2 => 'javelin-util',
       3 => 'javelin-behavior',
       4 => 'javelin-json',
       5 => 'javelin-dom',
       6 => 'javelin-resource',
     ),
     '263aeb8c' =>
     array(
       0 => 'javelin-behavior',
       1 => 'multirow-row-manager',
       2 => 'javelin-dom',
       3 => 'javelin-util',
       4 => 'phabricator-prefab',
       5 => 'javelin-tokenizer',
       6 => 'javelin-typeahead',
       7 => 'javelin-typeahead-preloaded-source',
       8 => 'javelin-json',
     ),
     '27d4da3f' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     '2a2dba85' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-request',
       2 => 'javelin-stratcom',
       3 => 'javelin-vector',
       4 => 'javelin-dom',
       5 => 'javelin-uri',
       6 => 'javelin-behavior-device',
     ),
     '2f2e18aa' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-workflow',
       3 => 'javelin-stratcom',
     ),
     '2fa810fc' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-view-renderer',
       3 => 'javelin-install',
     ),
     '327dbe61' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-stratcom',
       4 => 'javelin-request',
     ),
     '356de121' =>
     array(
       0 => 'javelin-util',
       1 => 'javelin-uri',
       2 => 'javelin-install',
     ),
     '37871df4' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-workflow',
       3 => 'javelin-dom',
       4 => 'phabricator-draggable-list',
     ),
     '3aa45ad9' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-mask',
       4 => 'javelin-util',
       5 => 'phabricator-busy',
     ),
     '3b3e1664' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phortune-credit-card-form',
     ),
     '3c918aa8' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-workflow',
       3 => 'javelin-dom',
       4 => 'javelin-fx',
     ),
     '403a3dce' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-event',
     ),
     '4173dbd8' =>
     array(
       0 => 'multirow-row-manager',
       1 => 'javelin-install',
       2 => 'javelin-typeahead',
       3 => 'javelin-util',
       4 => 'javelin-dom',
       5 => 'javelin-tokenizer',
       6 => 'javelin-typeahead-preloaded-source',
       7 => 'javelin-stratcom',
       8 => 'javelin-json',
       9 => 'phabricator-prefab',
     ),
     '441f2137' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     '46efd18e' =>
     array(
       0 => 'multirow-row-manager',
       1 => 'javelin-install',
       2 => 'path-typeahead',
       3 => 'javelin-dom',
       4 => 'javelin-util',
       5 => 'phabricator-prefab',
     ),
     '48db4145' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-behavior-device',
       2 => 'javelin-stratcom',
       3 => 'phabricator-tooltip',
     ),
     '493665ee' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     '4a11ea9c' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phabricator-drag-and-drop-file-upload',
       3 => 'phabricator-textareautils',
     ),
     '4e37e4de' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     '4f344388' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-vector',
       3 => 'javelin-request',
       4 => 'javelin-uri',
     ),
     '50395a1b' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-util',
     ),
     '5054855f' =>
     array(
       0 => 'javelin-magical-init',
       1 => 'javelin-install',
       2 => 'javelin-util',
       3 => 'javelin-vector',
       4 => 'javelin-stratcom',
     ),
     '52a92793' =>
     array(
       0 => 'javelin-util',
       1 => 'javelin-magical-init',
     ),
     '533a187b' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phabricator-prefab',
     ),
     '53f6f2dd' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-workflow',
       4 => 'javelin-stratcom',
     ),
     '54b612ba' =>
     array(
       0 => 'javelin-color',
       1 => 'javelin-install',
       2 => 'javelin-util',
     ),
     '551add57' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     '59b251eb' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-vector',
       3 => 'javelin-dom',
     ),
     '5bc2cb21' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
     ),
     '5d584426' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-stratcom',
       4 => 'javelin-vector',
     ),
     '5f004630' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-stratcom',
       4 => 'phabricator-dropdown-menu',
       5 => 'phabricator-menu-item',
       6 => 'phabricator-phtize',
     ),
     '5f850b5c' =>
     array(
       0 => 'javelin-install',
     ),
     '61d927ec' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-shaped-request',
     ),
     '62e18640' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-typeahead-normalizer',
     ),
     '6453c869' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-fx',
     ),
     '64ef2fd2' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-vector',
     ),
     '6b3dcf44' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     '6c2b09a2' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     '71755c79' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     '7319e029' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
     ),
     '75903ee1' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-request',
     ),
     '76f4ebed' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-reactor',
       2 => 'javelin-util',
     ),
     '77b1cf6f' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     '79473b62' =>
     array(
       0 => 'javelin-install',
     ),
     '7a68dda3' =>
     array(
       0 => 'owners-path-editor',
       1 => 'javelin-behavior',
     ),
     '7ba325ee' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     '7c273581' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     '7e41274a' =>
     array(
       0 => 'javelin-install',
     ),
     '7ebaeed3' =>
     array(
       0 => 'herald-rule-editor',
       1 => 'javelin-behavior',
     ),
     '7ee23816' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-stratcom',
       4 => 'javelin-workflow',
       5 => 'javelin-behavior-device',
       6 => 'javelin-history',
       7 => 'javelin-vector',
       8 => 'phabricator-shaped-request',
     ),
     '7ee2b591' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-history',
     ),
-    '82947dda' =>
-    array(
-      0 => 'javelin-behavior',
-      1 => 'javelin-stratcom',
-      2 => 'javelin-workflow',
-      3 => 'javelin-dom',
-    ),
     '82f568cd' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     '845731b8' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-aphlict',
       2 => 'javelin-stratcom',
       3 => 'javelin-request',
       4 => 'javelin-uri',
       5 => 'javelin-dom',
       6 => 'javelin-json',
       7 => 'phabricator-notification',
     ),
     '84845b5b' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-workflow',
       4 => 'phabricator-draggable-list',
     ),
     '84f34ab1' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-typeahead-source',
       2 => 'javelin-util',
     ),
     '858f9728' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     '889c96f3' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
     ),
     '8a3ed18b' =>
     array(
       0 => 'javelin-magical-init',
       1 => 'javelin-util',
     ),
     '8ab282be' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-uri',
     ),
     '8ef9ab58' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
     ),
     '8f24abfc' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     '8fd76bab' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-uri',
       3 => 'javelin-mask',
       4 => 'phabricator-drag-and-drop-file-upload',
     ),
     '9084a36f' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-fx',
       4 => 'javelin-request',
       5 => 'phabricator-shaped-request',
     ),
     '938aed89' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-json',
       4 => 'phabricator-draggable-list',
     ),
     '9414ff18' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-resource',
       2 => 'javelin-stratcom',
       3 => 'javelin-workflow',
       4 => 'javelin-util',
     ),
     '957a7fde' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-workflow',
       3 => 'javelin-dom',
       4 => 'phabricator-draggable-list',
     ),
     '9b9197be' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     '9c808199' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-behavior-device',
       2 => 'javelin-stratcom',
       3 => 'javelin-vector',
       4 => 'phabricator-hovercard',
     ),
     '9db3d160' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-vector',
       2 => 'javelin-dom',
     ),
     '9eb2cedb' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-uri',
       3 => 'javelin-request',
     ),
     'a3e2244e' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'a4ae61bf' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'phabricator-notification',
     ),
     'a51fdb2e' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-request',
       2 => 'javelin-stratcom',
       3 => 'javelin-dom',
     ),
     'a5d7cf86' =>
     array(
       0 => 'javelin-dom',
     ),
     'a79b75a4' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-request',
       3 => 'javelin-typeahead-source',
     ),
     'a82a7769' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'a8d8459d' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
     ),
     'ad7a69ca' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
       3 => 'javelin-dom',
       4 => 'javelin-vector',
     ),
     'ae6abfba' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-request',
       3 => 'javelin-dom',
       4 => 'javelin-uri',
       5 => 'phabricator-file-upload',
     ),
     'b3a4b884' =>
     array(
       0 => 'javelin-behavior',
       1 => 'phabricator-prefab',
     ),
     'b3e5ee60' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phortune-credit-card-form',
     ),
     'b3ec3cfc' =>
     array(
       0 => 'javelin-install',
     ),
     'b4c30592' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-reactor',
       2 => 'javelin-util',
       3 => 'javelin-reactor-node-calmer',
     ),
     'b4eef37b' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-request',
       3 => 'javelin-util',
     ),
     'b5842a5e' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-behavior-device',
       2 => 'javelin-stratcom',
       3 => 'javelin-dom',
       4 => 'javelin-magical-init',
       5 => 'javelin-vector',
       6 => 'javelin-request',
       7 => 'javelin-util',
     ),
     'b657bdf8' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-uri',
       2 => 'phabricator-keyboard-shortcut',
     ),
     'b6d401d6' =>
     array(
       0 => 'javelin-dom',
       1 => 'javelin-dynval',
       2 => 'javelin-reactor',
       3 => 'javelin-reactornode',
       4 => 'javelin-install',
       5 => 'javelin-util',
     ),
     'b98fc918' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-vector',
       3 => 'javelin-magical-init',
     ),
     'b9f26029' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
     ),
     'bc778103' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-history',
     ),
     'bdaf4d04' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-request',
     ),
     'be81801d' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-shaped-request',
     ),
     'bf97561d' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     'c01153ea' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-dropdown-menu',
       4 => 'phabricator-menu-item',
       5 => 'javelin-workflow',
     ),
     'c021950a' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'phabricator-phtize',
       4 => 'phabricator-textareautils',
       5 => 'javelin-workflow',
       6 => 'javelin-vector',
     ),
     'c293f7b9' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-event',
       2 => 'javelin-util',
       3 => 'javelin-magical-init',
     ),
     'c4b31646' =>
     array(
       0 => 'javelin-request',
       1 => 'javelin-behavior',
       2 => 'javelin-dom',
       3 => 'phabricator-busy',
     ),
     'c51a6616' =>
     array(
       0 => 'phabricator-notification',
       1 => 'javelin-stratcom',
       2 => 'javelin-behavior',
     ),
     'c54eeefb' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-vector',
       3 => 'javelin-util',
     ),
     'c60f4327' =>
     array(
       0 => 'javelin-stratcom',
       1 => 'javelin-install',
       2 => 'javelin-uri',
       3 => 'javelin-util',
     ),
     'c81bc98f' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-vector',
       3 => 'javelin-dom',
       4 => 'javelin-uri',
     ),
     'c8728c70' =>
     array(
       0 => 'javelin-behavior',
       1 => 'phabricator-keyboard-shortcut',
       2 => 'javelin-stratcom',
     ),
     'ca3f91eb' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'phabricator-phtize',
     ),
     'cd9e7094' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-typeahead',
       3 => 'javelin-typeahead-ondemand-source',
       4 => 'javelin-dom',
     ),
     'cdde23f1' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-typeahead-source',
     ),
     'ce0c217a' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-workflow',
       2 => 'javelin-util',
       3 => 'javelin-dom',
       4 => 'javelin-stratcom',
       5 => 'javelin-behavior-device',
       6 => 'javelin-vector',
       7 => 'phabricator-tooltip',
     ),
     'cf76cfd5' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-workflow',
       4 => 'javelin-fx',
       5 => 'javelin-util',
     ),
     'd254d646' =>
     array(
       0 => 'javelin-util',
     ),
     'd4a14807' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-view',
     ),
     'd6ca6b1c' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-reactor-dom',
       2 => 'javelin-view-html',
       3 => 'javelin-view-interpreter',
       4 => 'javelin-view-renderer',
     ),
     'd75709e6' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-workflow',
       2 => 'javelin-json',
       3 => 'javelin-dom',
       4 => 'phabricator-keyboard-shortcut',
     ),
     'd8ef8659' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-workflow',
       4 => 'javelin-util',
       5 => 'phabricator-notification',
       6 => 'javelin-behavior-device',
       7 => 'phabricator-dropdown-menu',
       8 => 'phabricator-menu-item',
     ),
     'd9a9b862' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
     ),
     'dab9253e' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
     ),
     'dd7e8ef5' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-workflow',
       3 => 'javelin-util',
       4 => 'javelin-stratcom',
     ),
     'dddd43ac' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phabricator-prefab',
     ),
     'dfa181a4' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-request',
     ),
     'e1ff79b1' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'e5822781' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-json',
       3 => 'javelin-workflow',
       4 => 'javelin-magical-init',
     ),
     'e5b406f9' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-view-visitor',
       3 => 'javelin-util',
     ),
     'e7c21fb3' =>
     array(
       0 => 'javelin-dom',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
       3 => 'javelin-install',
     ),
     'e9fdb5e5' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-util',
       3 => 'javelin-dom',
       4 => 'javelin-request',
       5 => 'phabricator-keyboard-shortcut',
     ),
     'ead554ec' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-util',
     ),
     'efe49472' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     'f2441746' =>
     array(
       0 => 'javelin-dom',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
       3 => 'javelin-install',
       4 => 'javelin-request',
       5 => 'javelin-workflow',
     ),
     'f28bf201' =>
     array(
       0 => 'javelin-stratcom',
       1 => 'javelin-request',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
       4 => 'javelin-install',
       5 => 'javelin-util',
       6 => 'javelin-mask',
       7 => 'javelin-uri',
     ),
     'f42bb8c6' =>
     array(
       0 => 'javelin-stratcom',
       1 => 'javelin-behavior',
       2 => 'javelin-vector',
       3 => 'javelin-dom',
     ),
     'f6555212' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-reactornode',
       2 => 'javelin-util',
       3 => 'javelin-reactor',
     ),
     'f6b56f7a' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-typeahead-ondemand-source',
       2 => 'javelin-typeahead',
       3 => 'javelin-dom',
       4 => 'javelin-uri',
       5 => 'javelin-util',
       6 => 'javelin-stratcom',
     ),
     'f7379f45' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-shaped-request',
     ),
     'f778a573' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-request',
       3 => 'javelin-typeahead-source',
     ),
     'f7f1289f' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
     ),
     'f7fc67ec' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-typeahead',
       2 => 'javelin-dom',
       3 => 'javelin-request',
       4 => 'javelin-typeahead-ondemand-source',
       5 => 'javelin-util',
     ),
     'f8248bc5' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-json',
       4 => 'javelin-stratcom',
       5 => 'phabricator-shaped-request',
     ),
     'fb342e18' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
       4 => 'javelin-stratcom',
       5 => 'phabricator-menu-item',
     ),
     'fbbce3bf' =>
     array(
       0 => 'phabricator-busy',
       1 => 'javelin-behavior',
     ),
     'fe2e0ba4' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-behavior-device',
       2 => 'javelin-stratcom',
       3 => 'javelin-vector',
       4 => 'javelin-dom',
       5 => 'javelin-magical-init',
     ),
     'fe7fc914' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-request',
       4 => 'phabricator-keyboard-shortcut',
       5 => 'phabricator-notification',
     ),
     'fe80fb6d' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-prefab',
       4 => 'multirow-row-manager',
       5 => 'javelin-json',
     ),
+    'fee00761' =>
+    array(
+      0 => 'javelin-behavior',
+      1 => 'javelin-stratcom',
+      2 => 'javelin-workflow',
+      3 => 'javelin-dom',
+    ),
     28497740 =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
       3 => 'javelin-dom',
       4 => 'javelin-vector',
       5 => 'javelin-magical-init',
       6 => 'javelin-request',
       7 => 'javelin-history',
       8 => 'javelin-workflow',
       9 => 'javelin-mask',
       10 => 'javelin-behavior-device',
       11 => 'phabricator-keyboard-shortcut',
     ),
     36903077 =>
     array(
       0 => 'aphront-typeahead-control-css',
     ),
     42126667 =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-request',
     ),
     44524435 =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-dynval',
       4 => 'javelin-reactor-dom',
     ),
     48086888 =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-workflow',
     ),
   ),
   'packages' =>
   array(
     'core.pkg.css' =>
     array(
       0 => 'phabricator-core-css',
       1 => 'phabricator-zindex-css',
       2 => 'phui-button-css',
       3 => 'phabricator-standard-page-view',
       4 => 'aphront-dialog-view-css',
       5 => 'phui-form-view-css',
       6 => 'aphront-panel-view-css',
       7 => 'aphront-table-view-css',
       8 => 'aphront-tokenizer-control-css',
       9 => 'aphront-typeahead-control-css',
       10 => 'aphront-list-filter-view-css',
       11 => 'phabricator-jump-nav',
       12 => 'phabricator-remarkup-css',
       13 => 'syntax-highlighting-css',
       14 => 'aphront-pager-view-css',
       15 => 'phabricator-transaction-view-css',
       16 => 'aphront-tooltip-css',
       17 => 'phabricator-flag-css',
       18 => 'aphront-error-view-css',
       19 => 'sprite-icons-css',
       20 => 'sprite-gradient-css',
       21 => 'sprite-menu-css',
       22 => 'sprite-apps-large-css',
       23 => 'sprite-status-css',
       24 => 'phabricator-main-menu-view',
       25 => 'phabricator-notification-css',
       26 => 'phabricator-notification-menu-css',
       27 => 'lightbox-attachment-css',
       28 => 'phui-header-view-css',
       29 => 'phabricator-filetree-view-css',
       30 => 'phabricator-nav-view-css',
       31 => 'phabricator-side-menu-view-css',
       32 => 'phabricator-crumbs-view-css',
       33 => 'phui-object-item-list-view-css',
       34 => 'global-drag-and-drop-css',
       35 => 'phui-spacing-css',
       36 => 'phui-form-css',
       37 => 'phui-icon-view-css',
       38 => 'phabricator-application-launch-view-css',
       39 => 'phabricator-action-list-view-css',
       40 => 'phui-property-list-view-css',
       41 => 'phui-tag-view-css',
       42 => 'phui-list-view-css',
     ),
     'core.pkg.js' =>
     array(
       0 => 'javelin-behavior-aphront-basic-tokenizer',
       1 => 'javelin-behavior-workflow',
       2 => 'javelin-behavior-aphront-form-disable-on-submit',
       3 => 'phabricator-keyboard-shortcut-manager',
       4 => 'phabricator-keyboard-shortcut',
       5 => 'javelin-behavior-phabricator-keyboard-shortcuts',
       6 => 'javelin-behavior-refresh-csrf',
       7 => 'javelin-behavior-phabricator-watch-anchor',
       8 => 'javelin-behavior-phabricator-autofocus',
       9 => 'phabricator-menu-item',
       10 => 'phabricator-dropdown-menu',
       11 => 'phabricator-phtize',
       12 => 'javelin-behavior-phabricator-oncopy',
       13 => 'phabricator-tooltip',
       14 => 'javelin-behavior-phabricator-tooltips',
       15 => 'phabricator-prefab',
       16 => 'javelin-behavior-device',
       17 => 'javelin-behavior-toggle-class',
       18 => 'javelin-behavior-lightbox-attachments',
       19 => 'phabricator-busy',
       20 => 'javelin-aphlict',
       21 => 'phabricator-notification',
       22 => 'javelin-behavior-aphlict-listen',
       23 => 'javelin-behavior-phabricator-search-typeahead',
       24 => 'javelin-behavior-konami',
       25 => 'javelin-behavior-aphlict-dropdown',
       26 => 'javelin-behavior-history-install',
       27 => 'javelin-behavior-phabricator-gesture',
       28 => 'javelin-behavior-phabricator-active-nav',
       29 => 'javelin-behavior-phabricator-nav',
       30 => 'javelin-behavior-phabricator-remarkup-assist',
       31 => 'phabricator-textareautils',
       32 => 'phabricator-file-upload',
       33 => 'javelin-behavior-global-drag-and-drop',
       34 => 'javelin-behavior-phabricator-reveal-content',
       35 => 'phabricator-hovercard',
       36 => 'javelin-behavior-phabricator-hovercards',
       37 => 'javelin-color',
       38 => 'javelin-fx',
     ),
     'darkconsole.pkg.js' =>
     array(
       0 => 'javelin-behavior-dark-console',
       1 => 'javelin-behavior-error-log',
     ),
     'differential.pkg.css' =>
     array(
       0 => 'differential-core-view-css',
       1 => 'differential-changeset-view-css',
       2 => 'differential-results-table-css',
       3 => 'differential-revision-history-css',
       4 => 'differential-revision-list-css',
       5 => 'differential-table-of-contents-css',
       6 => 'differential-revision-comment-css',
       7 => 'differential-revision-add-comment-css',
       8 => 'phabricator-object-selector-css',
       9 => 'phabricator-content-source-view-css',
       10 => 'differential-local-commits-view-css',
       11 => 'inline-comment-summary-css',
     ),
     'differential.pkg.js' =>
     array(
       0 => 'phabricator-drag-and-drop-file-upload',
       1 => 'phabricator-shaped-request',
       2 => 'javelin-behavior-differential-feedback-preview',
       3 => 'javelin-behavior-differential-edit-inline-comments',
       4 => 'javelin-behavior-differential-populate',
       5 => 'javelin-behavior-differential-show-more',
       6 => 'javelin-behavior-differential-diff-radios',
       7 => 'javelin-behavior-differential-comment-jump',
       8 => 'javelin-behavior-differential-add-reviewers-and-ccs',
       9 => 'javelin-behavior-differential-keyboard-navigation',
       10 => 'javelin-behavior-aphront-drag-and-drop-textarea',
       11 => 'javelin-behavior-phabricator-object-selector',
       12 => 'javelin-behavior-repository-crossreference',
       13 => 'javelin-behavior-load-blame',
       14 => 'differential-inline-comment-editor',
       15 => 'javelin-behavior-differential-dropdown-menus',
       16 => 'javelin-behavior-differential-toggle-files',
       17 => 'javelin-behavior-differential-user-select',
     ),
     'diffusion.pkg.css' =>
     array(
       0 => 'diffusion-commit-view-css',
       1 => 'diffusion-icons-css',
     ),
     'diffusion.pkg.js' =>
     array(
       0 => 'javelin-behavior-diffusion-pull-lastmodified',
       1 => 'javelin-behavior-diffusion-commit-graph',
       2 => 'javelin-behavior-audit-preview',
     ),
     'javelin.pkg.js' =>
     array(
       0 => 'javelin-util',
       1 => 'javelin-install',
       2 => 'javelin-event',
       3 => 'javelin-stratcom',
       4 => 'javelin-behavior',
       5 => 'javelin-resource',
       6 => 'javelin-request',
       7 => 'javelin-vector',
       8 => 'javelin-dom',
       9 => 'javelin-json',
       10 => 'javelin-uri',
       11 => 'javelin-workflow',
       12 => 'javelin-mask',
       13 => 'javelin-typeahead',
       14 => 'javelin-typeahead-normalizer',
       15 => 'javelin-typeahead-source',
       16 => 'javelin-typeahead-preloaded-source',
       17 => 'javelin-typeahead-ondemand-source',
       18 => 'javelin-tokenizer',
       19 => 'javelin-history',
     ),
     'maniphest.pkg.css' =>
     array(
       0 => 'maniphest-task-summary-css',
       1 => 'phabricator-project-tag-css',
     ),
     'maniphest.pkg.js' =>
     array(
       0 => 'javelin-behavior-maniphest-batch-selector',
       1 => 'javelin-behavior-maniphest-transaction-controls',
       2 => 'javelin-behavior-maniphest-transaction-preview',
       3 => 'javelin-behavior-maniphest-transaction-expand',
       4 => 'javelin-behavior-maniphest-subpriority-editor',
     ),
   ),
 );
diff --git a/src/applications/maniphest/config/PhabricatorManiphestConfigOptions.php b/src/applications/maniphest/config/PhabricatorManiphestConfigOptions.php
index 297b77d0fb..e0dffc2c26 100644
--- a/src/applications/maniphest/config/PhabricatorManiphestConfigOptions.php
+++ b/src/applications/maniphest/config/PhabricatorManiphestConfigOptions.php
@@ -1,350 +1,351 @@
 <?php
 
 final class PhabricatorManiphestConfigOptions
   extends PhabricatorApplicationConfigOptions {
 
   public function getName() {
     return pht("Maniphest");
   }
 
   public function getDescription() {
     return pht("Configure Maniphest.");
   }
 
   public function getOptions() {
 
     $priority_defaults = array(
       100 => array(
         'name'  => pht('Unbreak Now!'),
         'short' => pht('Unbreak!'),
         'color' => 'indigo',
       ),
       90 => array(
         'name' => pht('Needs Triage'),
         'short' => pht('Triage'),
         'color' => 'violet',
       ),
       80 => array(
         'name' => pht('High'),
         'short' => pht('High'),
         'color' => 'red',
       ),
       50 => array(
         'name' => pht('Normal'),
         'short' => pht('Normal'),
         'color' => 'orange',
       ),
       25 => array(
         'name' => pht('Low'),
         'short' => pht('Low'),
         'color' => 'yellow',
       ),
       0 => array(
         'name' => pht('Wishlist'),
         'short' => pht('Wish'),
         'color' => 'sky',
       ),
     );
 
     $status_type = 'custom:ManiphestStatusConfigOptionType';
     $status_defaults = array(
       'open' => array(
         'name' => pht('Open'),
         'special' => ManiphestTaskStatus::SPECIAL_DEFAULT,
       ),
       'resolved' => array(
         'name' => pht('Resolved'),
         'name.full' => pht('Closed, Resolved'),
         'closed' => true,
         'special' => ManiphestTaskStatus::SPECIAL_CLOSED,
         'prefixes' => array(
           'closed',
           'closes',
           'close',
           'fix',
           'fixes',
           'fixed',
           'resolve',
           'resolves',
           'resolved',
         ),
         'suffixes' => array(
           'as resolved',
           'as fixed',
         ),
       ),
       'wontfix' => array(
         'name' => pht('Wontfix'),
         'name.full' => pht('Closed, Wontfix'),
         'closed' => true,
         'prefixes' => array(
           'wontfix',
           'wontfixes',
           'wontfixed',
         ),
         'suffixes' => array(
           'as wontfix',
         ),
       ),
       'invalid' => array(
         'name' => pht('Invalid'),
         'name.full' => pht('Closed, Invalid'),
         'closed' => true,
         'prefixes' => array(
           'invalidate',
           'invalidates',
           'invalidated',
         ),
         'suffixes' => array(
           'as invalid',
         ),
       ),
       'duplicate' => array(
         'name' => pht('Duplicate'),
         'name.full' => pht('Closed, Duplicate'),
         'transaction.icon' => 'delete',
         'special' => ManiphestTaskStatus::SPECIAL_DUPLICATE,
         'closed' => true,
       ),
       'spite' => array(
         'name' => pht('Spite'),
         'name.full' => pht('Closed, Spite'),
         'name.action' => pht('Spited'),
         'transaction.icon' => 'dislike',
         'silly' => true,
         'closed' => true,
         'prefixes' => array(
           'spite',
           'spites',
           'spited',
         ),
         'suffixes' => array(
           'out of spite',
           'as spite',
         ),
       ),
     );
 
     $status_description = $this->deformat(pht(<<<EOTEXT
 Allows you to edit, add, or remove the task statuses available in Maniphest,
 like "Open", "Resolved" and "Invalid". The configuration should contain a map
 of status constants to status specifications (see defaults below for examples).
 
 The constant for each status should be 1-12 characters long and  contain only
 lowercase letters and digits. Valid examples are "open", "closed", and
 "invalid". Users will not normally see these values.
 
 The keys you can provide in a specification are:
 
   - `name` //Required string.// Name of the status, like "Invalid".
   - `name.full` //Optional string.// Longer name, like "Closed, Invalid". This
     appears on the task detail view in the header.
   - `name.action` //Optional string.// Action name for email subjects, like
     "Marked Invalid".
   - `closed` //Optional bool.// Statuses are either "open" or "closed".
     Specifying `true` here will mark the status as closed (like "Resolved" or
     "Invalid"). By default, statuses are open.
   - `special` //Optional string.// Mark this status as special. The special
     statuses are:
     - `default` This is the default status for newly created tasks. You must
       designate one status as default, and it must be an open status.
     - `closed` This is the default status for closed tasks (for example, tasks
-      closed via the "!close" action in email). You must designate one status
-      as the default closed status, and it must be a closed status.
+      closed via the "!close" action in email or via the quick close button in
+      Maniphest). You must designate one status as the default closed status,
+      and it must be a closed status.
     - `duplicate` This is the status used when tasks are merged into one
       another as duplicates. You must designate one status for duplicates,
       and it must be a closed status.
   - `transaction.icon` //Optional string.// Allows you to choose a different
     icon to use for this status when showing status changes in the transaction
     log.
   - `transaction.color` //Optional string.// Allows you to choose a different
     color to use for this status when showing status changes in the transaction
     log.
   - `silly` //Optional bool.// Marks this status as silly, and thus wholly
     inappropriate for use by serious businesses.
   - `prefixes` //Optional list<string>.// Allows you to specify a list of
     text prefixes which will trigger a task transition into this status
     when mentioned in a commit message. For example, providing "closes" here
     will allow users to move tasks to this status by writing `Closes T123` in
     commit messages.
   - `suffixes` //Optional list<string>.// Allows you to specify a list of
     text suffixes which will trigger a task transition into this status
     when mentioned in a commit message, after a valid prefix. For example,
     providing "as invalid" here will allow users to move tasks
     to this status by writing `Closes T123 as invalid`, even if another status
     is selected by the "Closes" prefix.
 
 Examining the default configuration and examples below will probably be helpful
 in understanding these options.
 
 EOTEXT
 ));
 
     $status_example = array(
       'open' => array(
         'name' => 'Open',
         'special' => 'default',
       ),
       'closed' => array(
         'name' => 'Closed',
         'special' => 'closed',
         'closed' => true,
       ),
       'duplicate' => array(
         'name' => 'Duplicate',
         'special' => 'duplicate',
         'closed' => true,
       ),
     );
 
     $json = new PhutilJSON();
     $status_example = $json->encodeFormatted($status_example);
 
     // This is intentionally blank for now, until we can move more Maniphest
     // logic to custom fields.
     $default_fields = array();
 
     foreach ($default_fields as $key => $enabled) {
       $default_fields[$key] = array(
         'disabled' => !$enabled,
       );
     }
 
     $custom_field_type = 'custom:PhabricatorCustomFieldConfigOptionType';
 
     return array(
       $this->newOption('maniphest.custom-field-definitions', 'wild', array())
         ->setSummary(pht("Custom Maniphest fields."))
         ->setDescription(
           pht(
             "Array of custom fields for Maniphest tasks. For details on ".
             "adding custom fields to Maniphest, see 'Maniphest User Guide: ".
             "Adding Custom Fields'."))
         ->addExample(
           '{"mycompany:estimated-hours": {"name": "Estimated Hours", '.
           '"type": "int", "caption": "Estimated number of hours this will '.
           'take."}}',
           pht('Valid Setting')),
       $this->newOption('maniphest.fields', $custom_field_type, $default_fields)
         ->setCustomData(id(new ManiphestTask())->getCustomFieldBaseClass())
         ->setDescription(pht("Select and reorder task fields.")),
       $this->newOption('maniphest.priorities', 'wild', $priority_defaults)
         ->setSummary(pht("Configure Maniphest priority names."))
         ->setDescription(
           pht(
             'Allows you to edit or override the default priorities available '.
             'in Maniphest, like "High", "Normal" and "Low". The configuration '.
             'should contain a map of priority constants to priority '.
             'specifications (see defaults below for examples).'.
             "\n\n".
             'The keys you can define for a priority are:'.
             "\n\n".
             '  - `name` Name of the priority.'."\n".
             '  - `short` Alternate shorter name, used in UIs where there is '.
             '    not much space available.'."\n".
             '  - `color` A color for this priority, like "red" or "blue".'.
             "\n\n".
             'You can choose which priority is the default for newly created '.
             'tasks with `maniphest.default-priority`.')),
       $this->newOption('maniphest.statuses', $status_type, $status_defaults)
         ->setSummary(pht('Configure Maniphest task statuses.'))
         ->setDescription($status_description)
         ->addExample($status_example, pht('Minimal Valid Config')),
       $this->newOption('maniphest.default-priority', 'int', 90)
         ->setSummary(pht("Default task priority for create flows."))
         ->setDescription(
           pht(
             "What should the default task priority be in create flows? See ".
             "the constants in @{class:ManiphestTaskPriority} for valid ".
             "values. Defaults to 'needs triage'.")),
       $this->newOption(
         'metamta.maniphest.reply-handler-domain',
         'string',
         null)
         ->setSummary(pht('Enable replying to tasks via email.'))
         ->setDescription(
           pht(
             'You can configure a reply handler domain so that email sent from '.
             'Maniphest will have a special "Reply To" address like '.
             '"T123+82+af19f@example.com" that allows recipients to reply by '.
             'email and interact with tasks. For instructions on configurating '.
             'reply handlers, see the article "Configuring Inbound Email" in '.
             'the Phabricator documentation. By default, this is set to `null` '.
             'and Phabricator will use a generic `noreply@` address or the '.
             'address of the acting user instead of a special reply handler '.
             'address (see `metamta.default-address`). If you set a domain '.
             'here, Phabricator will begin generating private reply handler '.
             'addresses. See also `metamta.maniphest.reply-handler` to further '.
             'configure behavior. This key should be set to the domain part '.
             'after the @, like "example.com".')),
       $this->newOption(
         'metamta.maniphest.reply-handler',
         'class',
         'ManiphestReplyHandler')
         ->setBaseClass('PhabricatorMailReplyHandler')
         ->setDescription(pht('Override reply handler class.')),
       $this->newOption(
         'metamta.maniphest.subject-prefix',
         'string',
         '[Maniphest]')
         ->setDescription(pht('Subject prefix for Maniphest mail.')),
       $this->newOption(
         'metamta.maniphest.public-create-email',
         'string',
         null)
         ->setSummary(pht('Allow filing bugs via email.'))
         ->setDescription(
           pht(
             'You can configure an email address like '.
             '"bugs@phabricator.example.com" which will automatically create '.
             'Maniphest tasks when users send email to it. This relies on the '.
             '"From" address to authenticate users, so it is is not completely '.
             'secure. To set this up, enter a complete email address like '.
             '"bugs@phabricator.example.com" and then configure mail to that '.
             'address so it routed to Phabricator (if you\'ve already '.
             'configured reply handlers, you\'re probably already done). See '.
             '"Configuring Inbound Email" in the documentation for more '.
             'information.')),
       $this->newOption(
         'metamta.maniphest.default-public-author',
         'string',
         null)
         ->setSummary(pht('Username anonymous bugs are filed under.'))
         ->setDescription(
           pht(
             'If you enable `metamta.maniphest.public-create-email` and create '.
             'an email address like "bugs@phabricator.example.com", it will '.
             'default to rejecting mail which doesn\'t come from a known user. '.
             'However, you might want to let anyone send email to this '.
             'address; to do so, set a default author here (a Phabricator '.
             'username). A typical use of this might be to create a "System '.
             'Agent" user called "bugs" and use that name here. If you specify '.
             'a valid username, mail will always be accepted and used to '.
             'create a task, even if the sender is not a system user. The '.
             'original email address will be stored in an `From Email` field '.
             'on the task.')),
       $this->newOption(
         'maniphest.priorities.unbreak-now',
         'int',
         100)
         ->setSummary(pht('Priority used to populate "Unbreak Now" on home.'))
         ->setDescription(
           pht(
             'Temporary setting. If set, this priority is used to populate the '.
             '"Unbreak Now" panel on the home page. You should adjust this if '.
             'you adjust priorities using `maniphest.priorities`.')),
       $this->newOption(
         'maniphest.priorities.needs-triage',
         'int',
         90)
         ->setSummary(pht('Priority used to populate "Needs Triage" on home.'))
         ->setDescription(
           pht(
             'Temporary setting. If set, this priority is used to populate the '.
             '"Needs Triage" panel on the home page. You should adjust this if '.
             'you adjust priorities using `maniphest.priorities`.')),
 
     );
   }
 
 }
diff --git a/src/applications/maniphest/controller/ManiphestTaskDetailController.php b/src/applications/maniphest/controller/ManiphestTaskDetailController.php
index b123ae96d9..6a670f0167 100644
--- a/src/applications/maniphest/controller/ManiphestTaskDetailController.php
+++ b/src/applications/maniphest/controller/ManiphestTaskDetailController.php
@@ -1,703 +1,724 @@
 <?php
 
 final class ManiphestTaskDetailController extends ManiphestController {
 
   private $id;
 
   public function shouldAllowPublic() {
     return true;
   }
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $e_title = null;
 
     $priority_map = ManiphestTaskPriority::getTaskPriorityMap();
 
     $task = id(new ManiphestTaskQuery())
       ->setViewer($user)
       ->withIDs(array($this->id))
       ->executeOne();
     if (!$task) {
       return new Aphront404Response();
     }
 
     $workflow = $request->getStr('workflow');
     $parent_task = null;
     if ($workflow && is_numeric($workflow)) {
       $parent_task = id(new ManiphestTaskQuery())
         ->setViewer($user)
         ->withIDs(array($workflow))
         ->executeOne();
     }
 
     $transactions = id(new ManiphestTransactionQuery())
       ->setViewer($user)
       ->withObjectPHIDs(array($task->getPHID()))
       ->needComments(true)
       ->execute();
 
     $field_list = PhabricatorCustomField::getObjectFields(
       $task,
       PhabricatorCustomField::ROLE_VIEW);
     $field_list
       ->setViewer($user)
       ->readFieldsFromStorage($task);
 
     $e_commit = PhabricatorEdgeConfig::TYPE_TASK_HAS_COMMIT;
     $e_dep_on = PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK;
     $e_dep_by = PhabricatorEdgeConfig::TYPE_TASK_DEPENDED_ON_BY_TASK;
     $e_rev    = PhabricatorEdgeConfig::TYPE_TASK_HAS_RELATED_DREV;
     $e_mock   = PhabricatorEdgeConfig::TYPE_TASK_HAS_MOCK;
 
     $phid = $task->getPHID();
 
     $query = id(new PhabricatorEdgeQuery())
       ->withSourcePHIDs(array($phid))
       ->withEdgeTypes(
         array(
           $e_commit,
           $e_dep_on,
           $e_dep_by,
           $e_rev,
           $e_mock,
         ));
     $edges = idx($query->execute(), $phid);
     $phids = array_fill_keys($query->getDestinationPHIDs(), true);
 
     foreach ($task->getCCPHIDs() as $phid) {
       $phids[$phid] = true;
     }
     foreach ($task->getProjectPHIDs() as $phid) {
       $phids[$phid] = true;
     }
     if ($task->getOwnerPHID()) {
       $phids[$task->getOwnerPHID()] = true;
     }
     $phids[$task->getAuthorPHID()] = true;
 
     $attached = $task->getAttached();
     foreach ($attached as $type => $list) {
       foreach ($list as $phid => $info) {
         $phids[$phid] = true;
       }
     }
 
     if ($parent_task) {
       $phids[$parent_task->getPHID()] = true;
     }
 
     $phids = array_keys($phids);
 
     $this->loadHandles($phids);
 
     $handles = $this->getLoadedHandles();
 
     $context_bar = null;
 
     if ($parent_task) {
       $context_bar = new AphrontContextBarView();
       $context_bar->addButton(phutil_tag(
       'a',
       array(
         'href' => '/maniphest/task/create/?parent='.$parent_task->getID(),
         'class' => 'green button',
       ),
       pht('Create Another Subtask')));
       $context_bar->appendChild(hsprintf(
         'Created a subtask of <strong>%s</strong>',
         $this->getHandle($parent_task->getPHID())->renderLink()));
     } else if ($workflow == 'create') {
       $context_bar = new AphrontContextBarView();
       $context_bar->addButton(phutil_tag('label', array(), 'Create Another'));
       $context_bar->addButton(phutil_tag(
         'a',
         array(
           'href' => '/maniphest/task/create/?template='.$task->getID(),
           'class' => 'green button',
         ),
         pht('Similar Task')));
       $context_bar->addButton(phutil_tag(
         'a',
         array(
           'href' => '/maniphest/task/create/',
           'class' => 'green button',
         ),
         pht('Empty Task')));
       $context_bar->appendChild(pht('New task created.'));
     }
 
     $engine = new PhabricatorMarkupEngine();
     $engine->setViewer($user);
     $engine->addObject($task, ManiphestTask::MARKUP_FIELD_DESCRIPTION);
     foreach ($transactions as $modern_xaction) {
       if ($modern_xaction->getComment()) {
         $engine->addObject(
           $modern_xaction->getComment(),
           PhabricatorApplicationTransactionComment::MARKUP_FIELD_COMMENT);
       }
     }
 
     $engine->process();
 
     $resolution_types = ManiphestTaskStatus::getTaskStatusMap();
 
     $transaction_types = array(
       PhabricatorTransactions::TYPE_COMMENT => pht('Comment'),
       ManiphestTransaction::TYPE_STATUS     => pht('Change Status'),
       ManiphestTransaction::TYPE_OWNER      => pht('Reassign / Claim'),
       ManiphestTransaction::TYPE_CCS        => pht('Add CCs'),
       ManiphestTransaction::TYPE_PRIORITY   => pht('Change Priority'),
       ManiphestTransaction::TYPE_ATTACH     => pht('Upload File'),
       ManiphestTransaction::TYPE_PROJECTS   => pht('Associate Projects'),
     );
 
     // Remove actions the user doesn't have permission to take.
 
     $requires = array(
       ManiphestTransaction::TYPE_OWNER =>
         ManiphestCapabilityEditAssign::CAPABILITY,
       ManiphestTransaction::TYPE_PRIORITY =>
         ManiphestCapabilityEditPriority::CAPABILITY,
       ManiphestTransaction::TYPE_PROJECTS =>
         ManiphestCapabilityEditProjects::CAPABILITY,
       ManiphestTransaction::TYPE_STATUS =>
         ManiphestCapabilityEditStatus::CAPABILITY,
     );
 
     foreach ($transaction_types as $type => $name) {
       if (isset($requires[$type])) {
         if (!$this->hasApplicationCapability($requires[$type])) {
           unset($transaction_types[$type]);
         }
       }
     }
 
     // Don't show an option to change to the current status, or to change to
     // the duplicate status explicitly.
     unset($resolution_types[$task->getStatus()]);
     unset($resolution_types[ManiphestTaskStatus::getDuplicateStatus()]);
 
     // Don't show owner/priority changes for closed tasks, as they don't make
     // much sense.
     if ($task->isClosed()) {
       unset($transaction_types[ManiphestTransaction::TYPE_PRIORITY]);
       unset($transaction_types[ManiphestTransaction::TYPE_OWNER]);
     }
 
     $default_claim = array(
       $user->getPHID() => $user->getUsername().' ('.$user->getRealName().')',
     );
 
     $draft = id(new PhabricatorDraft())->loadOneWhere(
       'authorPHID = %s AND draftKey = %s',
       $user->getPHID(),
       $task->getPHID());
     if ($draft) {
       $draft_text = $draft->getDraft();
     } else {
       $draft_text = null;
     }
 
     $is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business');
 
+    $submit_text = $is_serious
+      ? pht('Submit')
+      : pht('Avast!');
+
+    $close_text = $is_serious
+      ? pht('Close Task')
+      : pht('Scuttle Task');
+
+    $submit_control = id(new PHUIFormMultiSubmitControl());
+    if (!$task->isClosed()) {
+      $close_image = id(new PHUIIconView())
+          ->setSpriteSheet(PHUIIconView::SPRITE_ICONS)
+          ->setSpriteIcon('check');
+      $submit_control->addButtonView(
+        id(new PHUIButtonView())
+          ->setColor(PHUIButtonView::GREY)
+          ->setIcon($close_image)
+          ->setText($close_text)
+          ->setName('scuttle')
+          ->addSigil('alternate-submit-button'));
+    }
+    $submit_control->addSubmitButton($submit_text);
+
     $comment_form = new AphrontFormView();
     $comment_form
       ->setUser($user)
       ->setWorkflow(true)
       ->setAction('/maniphest/transaction/save/')
       ->setEncType('multipart/form-data')
       ->addHiddenInput('taskID', $task->getID())
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Action'))
           ->setName('action')
           ->setOptions($transaction_types)
           ->setID('transaction-action'))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Status'))
           ->setName('resolution')
           ->setControlID('resolution')
           ->setControlStyle('display: none')
           ->setOptions($resolution_types))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setLabel(pht('Assign To'))
           ->setName('assign_to')
           ->setControlID('assign_to')
           ->setControlStyle('display: none')
           ->setID('assign-tokenizer')
           ->setDisableBehavior(true))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setLabel(pht('CCs'))
           ->setName('ccs')
           ->setControlID('ccs')
           ->setControlStyle('display: none')
           ->setID('cc-tokenizer')
           ->setDisableBehavior(true))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Priority'))
           ->setName('priority')
           ->setOptions($priority_map)
           ->setControlID('priority')
           ->setControlStyle('display: none')
           ->setValue($task->getPriority()))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setLabel(pht('Projects'))
           ->setName('projects')
           ->setControlID('projects')
           ->setControlStyle('display: none')
           ->setID('projects-tokenizer')
           ->setDisableBehavior(true))
       ->appendChild(
         id(new AphrontFormFileControl())
           ->setLabel(pht('File'))
           ->setName('file')
           ->setControlID('file')
           ->setControlStyle('display: none'))
       ->appendChild(
         id(new PhabricatorRemarkupControl())
           ->setLabel(pht('Comments'))
           ->setName('comments')
           ->setValue($draft_text)
           ->setID('transaction-comments')
           ->setUser($user))
-      ->appendChild(
-        id(new AphrontFormSubmitControl())
-          ->setValue($is_serious ? pht('Submit') : pht('Avast!')));
+      ->appendChild($submit_control);
 
     $control_map = array(
       ManiphestTransaction::TYPE_STATUS   => 'resolution',
       ManiphestTransaction::TYPE_OWNER    => 'assign_to',
       ManiphestTransaction::TYPE_CCS      => 'ccs',
       ManiphestTransaction::TYPE_PRIORITY => 'priority',
       ManiphestTransaction::TYPE_PROJECTS => 'projects',
       ManiphestTransaction::TYPE_ATTACH   => 'file',
     );
 
     $tokenizer_map = array(
       ManiphestTransaction::TYPE_PROJECTS => array(
         'id'          => 'projects-tokenizer',
         'src'         => '/typeahead/common/projects/',
         'placeholder' => pht('Type a project name...'),
       ),
       ManiphestTransaction::TYPE_OWNER => array(
         'id'          => 'assign-tokenizer',
         'src'         => '/typeahead/common/users/',
         'value'       => $default_claim,
         'limit'       => 1,
         'placeholder' => pht('Type a user name...'),
       ),
       ManiphestTransaction::TYPE_CCS => array(
         'id'          => 'cc-tokenizer',
         'src'         => '/typeahead/common/mailable/',
         'placeholder' => pht('Type a user or mailing list...'),
       ),
     );
 
     // TODO: Initializing these behaviors for logged out users fatals things.
     if ($user->isLoggedIn()) {
       Javelin::initBehavior('maniphest-transaction-controls', array(
         'select'     => 'transaction-action',
         'controlMap' => $control_map,
         'tokenizers' => $tokenizer_map,
       ));
 
       Javelin::initBehavior('maniphest-transaction-preview', array(
         'uri'        => '/maniphest/transaction/preview/'.$task->getID().'/',
         'preview'    => 'transaction-preview',
         'comments'   => 'transaction-comments',
         'action'     => 'transaction-action',
         'map'        => $control_map,
         'tokenizers' => $tokenizer_map,
       ));
     }
 
     $comment_header = $is_serious
       ? pht('Add Comment')
       : pht('Weigh In');
 
     $preview_panel = phutil_tag_div(
       'aphront-panel-preview',
       phutil_tag(
         'div',
         array('id' => 'transaction-preview'),
         phutil_tag_div(
           'aphront-panel-preview-loading-text',
           pht('Loading preview...'))));
 
     $timeline = id(new PhabricatorApplicationTransactionView())
       ->setUser($user)
       ->setObjectPHID($task->getPHID())
       ->setTransactions($transactions)
       ->setMarkupEngine($engine);
 
     $object_name = 'T'.$task->getID();
     $actions = $this->buildActionView($task);
 
     $crumbs = $this->buildApplicationCrumbs()
       ->addTextCrumb($object_name, '/'.$object_name)
       ->setActionList($actions);
 
     $header = $this->buildHeaderView($task);
     $properties = $this->buildPropertyView(
       $task, $field_list, $edges, $actions);
     $description = $this->buildDescriptionView($task, $engine);
 
     if (!$user->isLoggedIn()) {
       // TODO: Eventually, everything should run through this. For now, we're
       // only using it to get a consistent "Login to Comment" button.
       $comment_box = id(new PhabricatorApplicationTransactionCommentView())
         ->setUser($user)
         ->setRequestURI($request->getRequestURI());
       $preview_panel = null;
     } else {
       $comment_box = id(new PHUIObjectBoxView())
         ->setFlush(true)
         ->setHeaderText($comment_header)
         ->appendChild($comment_form);
     }
 
     $object_box = id(new PHUIObjectBoxView())
       ->setHeader($header)
       ->addPropertyList($properties);
 
     if ($description) {
       $object_box->addPropertyList($description);
     }
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
         $context_bar,
         $object_box,
         $timeline,
         $comment_box,
         $preview_panel,
       ),
       array(
         'title' => 'T'.$task->getID().' '.$task->getTitle(),
         'pageObjects' => array($task->getPHID()),
         'device' => true,
       ));
   }
 
   private function buildHeaderView(ManiphestTask $task) {
     $view = id(new PHUIHeaderView())
       ->setHeader($task->getTitle())
       ->setUser($this->getRequest()->getUser())
       ->setPolicyObject($task);
 
     $status = $task->getStatus();
     $status_name = ManiphestTaskStatus::renderFullDescription($status);
 
     $view->addProperty(PHUIHeaderView::PROPERTY_STATUS, $status_name);
 
     return $view;
   }
 
 
   private function buildActionView(ManiphestTask $task) {
     $viewer = $this->getRequest()->getUser();
     $viewer_phid = $viewer->getPHID();
     $viewer_is_cc = in_array($viewer_phid, $task->getCCPHIDs());
 
     $id = $task->getID();
     $phid = $task->getPHID();
 
     $can_edit = PhabricatorPolicyFilter::hasCapability(
       $viewer,
       $task,
       PhabricatorPolicyCapability::CAN_EDIT);
 
     $view = id(new PhabricatorActionListView())
       ->setUser($viewer)
       ->setObject($task)
       ->setObjectURI($this->getRequest()->getRequestURI());
 
     $view->addAction(
       id(new PhabricatorActionView())
         ->setName(pht('Edit Task'))
         ->setIcon('edit')
         ->setHref($this->getApplicationURI("/task/edit/{$id}/"))
         ->setDisabled(!$can_edit)
         ->setWorkflow(!$can_edit));
 
     if ($task->getOwnerPHID() === $viewer_phid) {
       $view->addAction(
         id(new PhabricatorActionView())
           ->setName(pht('Automatically Subscribed'))
           ->setDisabled(true)
           ->setIcon('enable'));
     } else {
       $action = $viewer_is_cc ? 'rem' : 'add';
       $name   = $viewer_is_cc ? pht('Unsubscribe') : pht('Subscribe');
       $icon   = $viewer_is_cc ? 'disable' : 'check';
 
       $view->addAction(
         id(new PhabricatorActionView())
           ->setName($name)
           ->setHref("/maniphest/subscribe/{$action}/{$id}/")
           ->setRenderAsForm(true)
           ->setUser($viewer)
           ->setIcon($icon));
     }
 
     $view->addAction(
       id(new PhabricatorActionView())
         ->setName(pht('Merge Duplicates In'))
         ->setHref("/search/attach/{$phid}/TASK/merge/")
         ->setWorkflow(true)
         ->setIcon('merge')
         ->setDisabled(!$can_edit)
         ->setWorkflow(true));
 
     $view->addAction(
       id(new PhabricatorActionView())
         ->setName(pht('Create Subtask'))
         ->setHref($this->getApplicationURI("/task/create/?parent={$id}"))
         ->setIcon('fork'));
 
     $view->addAction(
       id(new PhabricatorActionView())
         ->setName(pht('Edit Dependencies'))
         ->setHref("/search/attach/{$phid}/TASK/dependencies/")
         ->setWorkflow(true)
         ->setIcon('link')
         ->setDisabled(!$can_edit)
         ->setWorkflow(true));
 
     return $view;
   }
 
   private function buildPropertyView(
     ManiphestTask $task,
     PhabricatorCustomFieldList $field_list,
     array $edges,
     PhabricatorActionListView $actions) {
 
     $viewer = $this->getRequest()->getUser();
 
     $view = id(new PHUIPropertyListView())
       ->setUser($viewer)
       ->setObject($task)
       ->setActionList($actions);
 
     $view->addProperty(
       pht('Assigned To'),
       $task->getOwnerPHID()
       ? $this->getHandle($task->getOwnerPHID())->renderLink()
       : phutil_tag('em', array(), pht('None')));
 
     $view->addProperty(
       pht('Priority'),
       ManiphestTaskPriority::getTaskPriorityName($task->getPriority()));
 
     $handles = $this->getLoadedHandles();
     $cc_handles = array_select_keys($handles, $task->getCCPHIDs());
     $subscriber_html = id(new SubscriptionListStringBuilder())
       ->setObjectPHID($task->getPHID())
       ->setHandles($cc_handles)
       ->buildPropertyString();
     $view->addProperty(pht('Subscribers'), $subscriber_html);
 
     $view->addProperty(
       pht('Author'),
       $this->getHandle($task->getAuthorPHID())->renderLink());
 
     $source = $task->getOriginalEmailSource();
     if ($source) {
       $subject = '[T'.$task->getID().'] '.$task->getTitle();
       $view->addProperty(
         pht('From Email'),
         phutil_tag(
           'a',
           array(
             'href' => 'mailto:'.$source.'?subject='.$subject
           ),
           $source));
     }
 
     $project_phids = $task->getProjectPHIDs();
     if ($project_phids) {
       require_celerity_resource('maniphest-task-summary-css');
 
       // If we end up with real-world projects with many hundreds of columns, it
       // might be better to just load all the edges, then load those columns and
       // work backward that way, or denormalize this data more.
 
       $columns = id(new PhabricatorProjectColumnQuery())
         ->setViewer($viewer)
         ->withProjectPHIDs($project_phids)
         ->execute();
       $columns = mpull($columns, null, 'getPHID');
 
       $column_edge_type = PhabricatorEdgeConfig::TYPE_OBJECT_HAS_COLUMN;
       $all_column_phids = array_keys($columns);
 
       $column_edge_query = id(new PhabricatorEdgeQuery())
         ->withSourcePHIDs(array($task->getPHID()))
         ->withEdgeTypes(array($column_edge_type))
         ->withDestinationPHIDs($all_column_phids);
       $column_edge_query->execute();
       $in_column_phids = array_fuse($column_edge_query->getDestinationPHIDs());
 
       $column_groups = mgroup($columns, 'getProjectPHID');
 
       $project_rows = array();
       foreach ($project_phids as $project_phid) {
         $row = array();
 
         $handle = $this->getHandle($project_phid);
         $row[] = $handle->renderLink();
 
         $columns = idx($column_groups, $project_phid, array());
         $column = head(array_intersect_key($columns, $in_column_phids));
         if ($column) {
           $column_name = pht('(%s)', $column->getDisplayName());
           // TODO: This is really hacky but there's no cleaner way to do it
           // right now, T4022 should give us better tools for this.
           $column_href = str_replace(
             'project/view',
             'project/board',
             $handle->getURI());
           $column_link = phutil_tag(
             'a',
             array(
               'href' => $column_href,
               'class' => 'maniphest-board-link',
             ),
             $column_name);
 
           $row[] = ' ';
           $row[] = $column_link;
         }
 
         $project_rows[] = phutil_tag('div', array(), $row);
       }
     } else {
       $project_rows = phutil_tag('em', array(), pht('None'));
     }
 
     $view->addProperty(pht('Projects'), $project_rows);
 
     $edge_types = array(
       PhabricatorEdgeConfig::TYPE_TASK_DEPENDED_ON_BY_TASK
       => pht('Dependent Tasks'),
       PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK
       => pht('Depends On'),
       PhabricatorEdgeConfig::TYPE_TASK_HAS_RELATED_DREV
       => pht('Differential Revisions'),
       PhabricatorEdgeConfig::TYPE_TASK_HAS_MOCK
       => pht('Pholio Mocks'),
     );
 
     $revisions_commits = array();
     $handles = $this->getLoadedHandles();
 
     $commit_phids = array_keys(
       $edges[PhabricatorEdgeConfig::TYPE_TASK_HAS_COMMIT]);
     if ($commit_phids) {
       $commit_drev = PhabricatorEdgeConfig::TYPE_COMMIT_HAS_DREV;
       $drev_edges = id(new PhabricatorEdgeQuery())
         ->withSourcePHIDs($commit_phids)
         ->withEdgeTypes(array($commit_drev))
         ->execute();
 
       foreach ($commit_phids as $phid) {
         $revisions_commits[$phid] = $handles[$phid]->renderLink();
         $revision_phid = key($drev_edges[$phid][$commit_drev]);
         $revision_handle = idx($handles, $revision_phid);
         if ($revision_handle) {
           $task_drev = PhabricatorEdgeConfig::TYPE_TASK_HAS_RELATED_DREV;
           unset($edges[$task_drev][$revision_phid]);
           $revisions_commits[$phid] = hsprintf(
             '%s / %s',
             $revision_handle->renderLink($revision_handle->getName()),
             $revisions_commits[$phid]);
         }
       }
     }
 
     foreach ($edge_types as $edge_type => $edge_name) {
       if ($edges[$edge_type]) {
         $view->addProperty(
           $edge_name,
           $this->renderHandlesForPHIDs(array_keys($edges[$edge_type])));
       }
     }
 
     if ($revisions_commits) {
       $view->addProperty(
         pht('Commits'),
         phutil_implode_html(phutil_tag('br'), $revisions_commits));
     }
 
     $attached = $task->getAttached();
     if (!is_array($attached)) {
       $attached = array();
     }
 
     $file_infos = idx($attached, PhabricatorFilePHIDTypeFile::TYPECONST);
     if ($file_infos) {
       $file_phids = array_keys($file_infos);
 
       // TODO: These should probably be handles or something; clean this up
       // as we sort out file attachments.
       $files = id(new PhabricatorFileQuery())
         ->setViewer($viewer)
         ->withPHIDs($file_phids)
         ->execute();
 
       $file_view = new PhabricatorFileLinkListView();
       $file_view->setFiles($files);
 
       $view->addProperty(
         pht('Files'),
         $file_view->render());
     }
 
     $field_list->appendFieldsToPropertyList(
       $task,
       $viewer,
       $view);
 
     $view->invokeWillRenderEvent();
 
     return $view;
   }
 
   private function buildDescriptionView(
     ManiphestTask $task,
     PhabricatorMarkupEngine $engine) {
 
     $section = null;
     if (strlen($task->getDescription())) {
       $section = new PHUIPropertyListView();
       $section->addSectionHeader(
         pht('Description'),
         PHUIPropertyListView::ICON_SUMMARY);
       $section->addTextContent(
         phutil_tag(
           'div',
           array(
             'class' => 'phabricator-remarkup',
           ),
           $engine->getOutput($task, ManiphestTask::MARKUP_FIELD_DESCRIPTION)));
     }
 
     return $section;
   }
 
 }
diff --git a/src/applications/maniphest/controller/ManiphestTransactionSaveController.php b/src/applications/maniphest/controller/ManiphestTransactionSaveController.php
index 52420fc394..181f1df0c5 100644
--- a/src/applications/maniphest/controller/ManiphestTransactionSaveController.php
+++ b/src/applications/maniphest/controller/ManiphestTransactionSaveController.php
@@ -1,257 +1,266 @@
 <?php
 
 final class ManiphestTransactionSaveController extends ManiphestController {
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $task = id(new ManiphestTaskQuery())
       ->setViewer($user)
       ->withIDs(array($request->getStr('taskID')))
       ->executeOne();
     if (!$task) {
       return new Aphront404Response();
     }
 
     $task_uri = '/'.$task->getMonogram();
 
     $transactions = array();
 
     $action = $request->getStr('action');
 
     // If we have drag-and-dropped files, attach them first in a separate
     // transaction. These can come in on any transaction type, which is why we
     // handle them separately.
     $files = array();
 
     // Look for drag-and-drop uploads first.
     $file_phids = $request->getArr('files');
     if ($file_phids) {
       $files = id(new PhabricatorFileQuery())
         ->setViewer($user)
         ->withPHIDs(array($file_phids))
         ->execute();
     }
 
     // This means "attach a file" even though we store other types of data
     // as 'attached'.
     if ($action == ManiphestTransaction::TYPE_ATTACH) {
       if (!empty($_FILES['file'])) {
         $err = idx($_FILES['file'], 'error');
         if ($err != UPLOAD_ERR_NO_FILE) {
           $file = PhabricatorFile::newFromPHPUpload(
             $_FILES['file'],
             array(
               'authorPHID' => $user->getPHID(),
             ));
           $files[] = $file;
         }
       }
     }
 
     // If we had explicit or drag-and-drop files, create a transaction
     // for those before we deal with whatever else might have happened.
     $file_transaction = null;
     if ($files) {
       $files = mpull($files, 'getPHID', 'getPHID');
       $new = $task->getAttached();
       foreach ($files as $phid) {
         if (empty($new[PhabricatorFilePHIDTypeFile::TYPECONST])) {
           $new[PhabricatorFilePHIDTypeFile::TYPECONST] = array();
         }
         $new[PhabricatorFilePHIDTypeFile::TYPECONST][$phid] = array();
       }
       $transaction = new ManiphestTransaction();
       $transaction
         ->setTransactionType(ManiphestTransaction::TYPE_ATTACH);
       $transaction->setNewValue($new);
       $transactions[] = $transaction;
     }
 
     // Compute new CCs added by @mentions. Several things can cause CCs to
     // be added as side effects: mentions, explicit CCs, users who aren't
     // CC'd interacting with the task, and ownership changes. We build up a
     // list of all the CCs and then construct a transaction for them at the
     // end if necessary.
     $added_ccs = PhabricatorMarkupEngine::extractPHIDsFromMentions(
       array(
         $request->getStr('comments'),
       ));
 
     $cc_transaction = new ManiphestTransaction();
     $cc_transaction
       ->setTransactionType(ManiphestTransaction::TYPE_CCS);
 
     $transaction = new ManiphestTransaction();
     $transaction
       ->setTransactionType($action);
 
     switch ($action) {
       case ManiphestTransaction::TYPE_STATUS:
         $transaction->setNewValue($request->getStr('resolution'));
         break;
       case ManiphestTransaction::TYPE_OWNER:
         $assign_to = $request->getArr('assign_to');
         $assign_to = reset($assign_to);
         $transaction->setNewValue($assign_to);
         break;
       case ManiphestTransaction::TYPE_PROJECTS:
         $projects = $request->getArr('projects');
         $projects = array_merge($projects, $task->getProjectPHIDs());
         $projects = array_filter($projects);
         $projects = array_unique($projects);
         $transaction->setNewValue($projects);
         break;
       case ManiphestTransaction::TYPE_CCS:
         // Accumulate the new explicit CCs into the array that we'll add in
         // the CC transaction later.
         $added_ccs = array_merge($added_ccs, $request->getArr('ccs'));
 
         // Throw away the primary transaction.
         $transaction = null;
         break;
       case ManiphestTransaction::TYPE_PRIORITY:
         $transaction->setNewValue($request->getInt('priority'));
         break;
       case ManiphestTransaction::TYPE_ATTACH:
         // Nuke this, we created it above.
         $transaction = null;
         break;
       case PhabricatorTransactions::TYPE_COMMENT:
         // Nuke this, we're going to create it below.
         $transaction = null;
         break;
       default:
         throw new Exception('unknown action');
     }
 
     if ($transaction) {
       $transactions[] = $transaction;
     }
 
+    $resolution = $request->getStr('resolution');
+    $did_scuttle = false;
+    if ($action !== ManiphestTransaction::TYPE_STATUS) {
+      if ($request->getStr('scuttle')) {
+        $transactions[] = id(new ManiphestTransaction())
+          ->setTransactionType(ManiphestTransaction::TYPE_STATUS)
+          ->setNewValue(ManiphestTaskStatus::getDefaultClosedStatus());
+        $did_scuttle = true;
+        $resolution = ManiphestTaskStatus::getDefaultClosedStatus();
+      }
+    }
+
     // When you interact with a task, we add you to the CC list so you get
     // further updates, and possibly assign the task to you if you took an
     // ownership action (closing it) but it's currently unowned. We also move
     // previous owners to CC if ownership changes. Detect all these conditions
     // and create side-effect transactions for them.
 
     $implicitly_claimed = false;
-    switch ($action) {
-      case ManiphestTransaction::TYPE_OWNER:
-        if ($task->getOwnerPHID() == $transaction->getNewValue()) {
-          // If this is actually no-op, don't generate the side effect.
-          break;
-        }
-        // Otherwise, when a task is reassigned, move the previous owner to CC.
-        $added_ccs[] = $task->getOwnerPHID();
-        break;
-      case ManiphestTransaction::TYPE_STATUS:
-        $resolution = $request->getStr('resolution');
-        if (!$task->getOwnerPHID() &&
-            ManiphestTaskStatus::isClosedStatus($resolution)) {
-          // Closing an unassigned task. Assign the user as the owner of
-          // this task.
-          $assign = new ManiphestTransaction();
-          $assign->setTransactionType(ManiphestTransaction::TYPE_OWNER);
-          $assign->setNewValue($user->getPHID());
-          $transactions[] = $assign;
-
-          $implicitly_claimed = true;
-        }
+    if ($action == ManiphestTransaction::TYPE_OWNER) {
+      if ($task->getOwnerPHID() == $transaction->getNewValue()) {
+        // If this is actually no-op, don't generate the side effect.
         break;
+      }
+      // Otherwise, when a task is reassigned, move the previous owner to CC.
+      $added_ccs[] = $task->getOwnerPHID();
     }
 
+    if ($did_scuttle || ($action == ManiphestTransaction::TYPE_STATUS)) {
+      if (!$task->getOwnerPHID() &&
+          ManiphestTaskStatus::isClosedStatus($resolution)) {
+        // Closing an unassigned task. Assign the user as the owner of
+        // this task.
+        $assign = new ManiphestTransaction();
+        $assign->setTransactionType(ManiphestTransaction::TYPE_OWNER);
+        $assign->setNewValue($user->getPHID());
+        $transactions[] = $assign;
+
+        $implicitly_claimed = true;
+      }
+    }
 
     $user_owns_task = false;
     if ($implicitly_claimed) {
       $user_owns_task = true;
     } else {
       if ($action == ManiphestTransaction::TYPE_OWNER) {
         if ($transaction->getNewValue() == $user->getPHID()) {
           $user_owns_task = true;
         }
       } else if ($task->getOwnerPHID() == $user->getPHID()) {
         $user_owns_task = true;
       }
     }
 
     if (!$user_owns_task) {
       // If we aren't making the user the new task owner and they aren't the
       // existing task owner, add them to CC unless they're aleady CC'd.
       if (!in_array($user->getPHID(), $task->getCCPHIDs())) {
         $added_ccs[] = $user->getPHID();
       }
     }
 
     // Evade no-effect detection in the new editor stuff until we can switch
     // to subscriptions.
     $added_ccs = array_filter(array_diff($added_ccs, $task->getCCPHIDs()));
 
     if ($added_ccs) {
       // We've added CCs, so include a CC transaction.
       $all_ccs = array_merge($task->getCCPHIDs(), $added_ccs);
       $cc_transaction->setNewValue($all_ccs);
       $transactions[] = $cc_transaction;
     }
 
     $comments = $request->getStr('comments');
     if (strlen($comments) || !$transactions) {
       $transactions[] = id(new ManiphestTransaction())
         ->setTransactionType(PhabricatorTransactions::TYPE_COMMENT)
         ->attachComment(
           id(new ManiphestTransactionComment())
             ->setContent($comments));
     }
 
     $event = new PhabricatorEvent(
       PhabricatorEventType::TYPE_MANIPHEST_WILLEDITTASK,
       array(
         'task'          => $task,
         'new'           => false,
         'transactions'  => $transactions,
       ));
     $event->setUser($user);
     $event->setAphrontRequest($request);
     PhutilEventEngine::dispatchEvent($event);
 
     $task = $event->getValue('task');
     $transactions = $event->getValue('transactions');
 
     $editor = id(new ManiphestTransactionEditor())
       ->setActor($user)
       ->setContentSourceFromRequest($request)
       ->setContinueOnMissingFields(true)
       ->setContinueOnNoEffect($request->isContinueRequest());
 
     try {
       $editor->applyTransactions($task, $transactions);
     } catch (PhabricatorApplicationTransactionNoEffectException $ex) {
       return id(new PhabricatorApplicationTransactionNoEffectResponse())
         ->setCancelURI($task_uri)
         ->setException($ex);
     }
 
     $draft = id(new PhabricatorDraft())->loadOneWhere(
       'authorPHID = %s AND draftKey = %s',
       $user->getPHID(),
       $task->getPHID());
     if ($draft) {
       $draft->delete();
     }
 
     $event = new PhabricatorEvent(
       PhabricatorEventType::TYPE_MANIPHEST_DIDEDITTASK,
       array(
         'task'          => $task,
         'new'           => false,
         'transactions'  => $transactions,
       ));
     $event->setUser($user);
     $event->setAphrontRequest($request);
     PhutilEventEngine::dispatchEvent($event);
 
     return id(new AphrontRedirectResponse())->setURI($task_uri);
   }
 
 }
diff --git a/src/view/form/control/AphrontFormSubmitControl.php b/src/view/form/control/AphrontFormSubmitControl.php
index 3cb1f7fea6..2d4bb09f5e 100644
--- a/src/view/form/control/AphrontFormSubmitControl.php
+++ b/src/view/form/control/AphrontFormSubmitControl.php
@@ -1,41 +1,45 @@
 <?php
 
 final class AphrontFormSubmitControl extends AphrontFormControl {
 
-  protected $cancelButton;
+  private $cancelButton;
 
   public function addCancelButton($href, $label = null) {
     if (!$label) {
       $label = pht('Cancel');
     }
 
     $this->cancelButton = phutil_tag(
       'a',
       array(
         'href' => $href,
         'class' => 'button grey',
       ),
       $label);
     return $this;
   }
 
   protected function getCustomControlClass() {
     return 'aphront-form-control-submit';
   }
 
   protected function renderInput() {
     $submit_button = null;
     if ($this->getValue()) {
       $submit_button = phutil_tag(
         'button',
         array(
           'type'      => 'submit',
           'name'      => '__submit__',
           'disabled'  => $this->getDisabled() ? 'disabled' : null,
         ),
         $this->getValue());
     }
-    return hsprintf('%s%s', $submit_button, $this->cancelButton);
+
+    return array(
+      $submit_button,
+      $this->cancelButton,
+    );
   }
 
 }
diff --git a/src/view/form/control/PHUIFormMultiSubmitControl.php b/src/view/form/control/PHUIFormMultiSubmitControl.php
index 71433e6647..af234919d8 100644
--- a/src/view/form/control/PHUIFormMultiSubmitControl.php
+++ b/src/view/form/control/PHUIFormMultiSubmitControl.php
@@ -1,55 +1,61 @@
 <?php
 
 final class PHUIFormMultiSubmitControl extends AphrontFormControl {
 
   private $buttons = array();
 
   public function addBackButton($label = null) {
     if ($label === null) {
       $label = pht("\xC2\xAB Back");
     }
     return $this->addButton('__back__', $label, 'grey');
   }
 
   public function addSubmitButton($label) {
     return $this->addButton('__submit__', $label);
   }
 
   public function addCancelButton($uri, $label = null) {
     if ($label === null) {
       $label = pht('Cancel');
     }
 
     $this->buttons[] = phutil_tag(
       'a',
       array(
         'class' => 'grey button',
         'href' => $uri,
       ),
       $label);
 
     return $this;
   }
 
+  public function addButtonView(PHUIButtonView $button) {
+    $this->buttons[] = $button;
+    return $this;
+  }
+
   public function addButton($name, $label, $class = null) {
-    $this->buttons[] = phutil_tag(
+    $this->buttons[] = javelin_tag(
       'input',
       array(
         'type'  => 'submit',
         'name'  => $name,
         'value' => $label,
         'class' => $class,
+        'sigil' => 'alternate-submit-button',
         'disabled' => $this->getDisabled() ? 'disabled' : null,
       ));
     return $this;
   }
 
   protected function getCustomControlClass() {
     return 'phui-form-control-multi-submit';
   }
 
   protected function renderInput() {
     return array_reverse($this->buttons);
   }
 
 }
diff --git a/src/view/phui/PHUIButtonView.php b/src/view/phui/PHUIButtonView.php
index 52105a8b5d..e0019f7edf 100644
--- a/src/view/phui/PHUIButtonView.php
+++ b/src/view/phui/PHUIButtonView.php
@@ -1,134 +1,147 @@
 <?php
 
 final class PHUIButtonView extends AphrontTagView {
 
   const GREEN = 'green';
   const GREY = 'grey';
   const BLACK = 'black';
   const DISABLED = 'disabled';
   const SIMPLE = 'simple';
 
   const SMALL = 'small';
   const BIG = 'big';
 
   private $size;
   private $text;
   private $subtext;
   private $color;
   private $tag = 'button';
   private $dropdown;
   private $icon;
   private $href = null;
   private $title = null;
   private $disabled;
+  private $name;
+
+  public function setName($name) {
+    $this->name = $name;
+    return $this;
+  }
+
+  public function getName() {
+    return $this->name;
+  }
 
   public function setText($text) {
     $this->text = $text;
     return $this;
   }
 
   public function setHref($href) {
     $this->href = $href;
     return $this;
   }
 
   public function setTitle($title) {
     $this->title = $title;
     return $this;
   }
 
   public function setSubtext($subtext) {
     $this->subtext = $subtext;
     return $this;
   }
 
   public function setColor($color) {
     $this->color = $color;
     return $this;
   }
 
   public function setDisabled($disabled) {
     $this->disabled = $disabled;
     return $this;
   }
 
   public function setTag($tag) {
     $this->tag = $tag;
     return $this;
   }
 
   public function setSize($size) {
     $this->size = $size;
     return $this;
   }
 
   public function setDropdown($dd) {
     $this->dropdown = $dd;
     return $this;
   }
 
   public function setIcon(PHUIIconView $icon) {
     $this->icon = $icon;
     return $this;
   }
 
   public function getTagName() {
     return $this->tag;
   }
 
   protected function getTagAttributes() {
 
     require_celerity_resource('phui-button-css');
 
     $classes = array();
     $classes[] = 'button';
 
     if ($this->color) {
       $classes[] = $this->color;
     }
 
     if ($this->size) {
       $classes[] = $this->size;
     }
 
     if ($this->dropdown) {
       $classes[] = 'dropdown';
     }
 
     if ($this->icon) {
       $classes[] = 'has-icon';
     }
 
     if ($this->disabled) {
       $classes[] = 'disabled';
     }
 
-    return array('class'  => $classes,
-                 'href'   => $this->href,
-                 'title'  => $this->title);
+    return array(
+      'class'  => $classes,
+      'href'   => $this->href,
+      'name'   => $this->name,
+      'title'  => $this->title,
+    );
   }
 
   protected function getTagContent() {
 
     $icon = null;
     $text = $this->text;
     if ($this->icon) {
       $icon = $this->icon;
 
       $subtext = null;
       if ($this->subtext) {
         $subtext = phutil_tag(
           'div', array('class' => 'phui-button-subtext'), $this->subtext);
       }
       $text = phutil_tag(
         'div', array('class' => 'phui-button-text'), array($text, $subtext));
     }
 
     $caret = null;
     if ($this->dropdown) {
       $caret = phutil_tag('span', array('class' => 'caret'), '');
     }
 
     return array($icon, $text, $caret);
   }
 }
diff --git a/webroot/rsrc/css/phui/phui-form-view.css b/webroot/rsrc/css/phui/phui-form-view.css
index d99f4f6095..52f266174a 100644
--- a/webroot/rsrc/css/phui/phui-form-view.css
+++ b/webroot/rsrc/css/phui/phui-form-view.css
@@ -1,452 +1,453 @@
 /**
  * @provides phui-form-view-css
  */
 
 .phui-form-view {
   padding: 16px;
 }
 
 .phui-form-view.phui-form-full-width {
   padding: 0;
 }
 
 /* only used in transaction comments */
 .phui-form-shaded .phui-form-view {
   border-bottom: 1px solid #D4DAE0;
   background: #F4F5F8;
 }
 
 .phui-form-view label.aphront-form-label {
   padding-top: 5px;
   width: 19%;
   float: left;
   text-align: right;
   font-weight: bold;
   font-size: 13px;
   color: {$bluetext};
   -webkit-font-smoothing: antialiased;
 }
 
 .device-phone .phui-form-view label.aphront-form-label,
 .phui-form-full-width.phui-form-view label.aphront-form-label {
   display: block;
   float: none;
   text-align: left;
   width: 100%;
   margin-bottom: 3px;
 }
 
 .aphront-form-input {
   margin-left: 20%;
   margin-right: 20%;
   width: 60%;
 }
 
 .device-phone .aphront-form-input,
 .phui-form-full-width .aphront-form-input {
   margin-left: 0%;
   margin-right: 0%;
   width: 100%;
 }
 
 .aphront-form-error {
   width: 18%;
   float: right;
   color: {$red};
   font-weight: bold;
   padding-top: 5px;
 }
 
 .aphront-dialog-body .phui-form-full-width {
   margin-top: -10px;
 }
 
 .aphront-dialog-body .phui-form-view {
   padding: 0;
 }
 
 .device-phone .aphront-form-error,
 .phui-form-full-width .aphront-form-error {
   float: none;
   width: 100%;
 }
 
 .device-phone .aphront-form-drag-and-drop-upload {
   display: none;
 }
 
 .aphront-form-required {
   font-weight: normal;
   color: {$lightgreytext};
   font-size: 11px;
   -webkit-font-smoothing: antialiased;
 }
 
 .aphront-form-input input {
   width: 100%;
 }
 
 .aphront-form-input textarea {
   display: block;
   width: 100%;
   box-sizing: border-box;
   height: 12em;
 }
 
 .aphront-form-control {
   padding: 4px;
 }
 
 .phui-form-full-width .aphront-form-control {
   padding: 4px 0;
 }
 
 .aphront-form-control-submit button,
 .aphront-form-control-submit a.button {
   float: right;
   margin: 4px 0 0 8px;
 }
 
 .phui-form-control-multi-submit input,
+.phui-form-control-multi-submit button,
 .phui-form-control-multi-submit a {
   float: right;
-  margin: 0.5em 0 0em 2%;
+  margin: 4px 0 0 8px;
   width: auto;
 }
 
 .aphront-form-control-textarea textarea.aphront-textarea-very-short {
   height: 44px;
 }
 
 .aphront-form-control-textarea textarea.aphront-textarea-very-tall {
   height: 24em;
 }
 
 .aphront-form-control-select .aphront-form-input {
   padding-top: 2px;
 }
 
 .phui-form-view .aphront-form-caption {
   font-size: 12px;
   color: {$bluetext};
   padding: 8px 4px;
   text-align: right;
   margin-right: 20%;
   margin-left: 20%;
   -webkit-font-smoothing: antialiased;
   line-height: 15px;
 }
 
 .device-phone .phui-form-view .aphront-form-caption,
 .phui-form-full-width .phui-form-view .aphront-form-caption {
   margin-right: 0%;
 }
 
 /* override for when inside an aphront-panel-view */
 .aphront-panel-view .phui-form-view h1 {
   padding: 0em 0em .8em 0em;
 }
 
 .aphront-form-instructions {
   width: 60%;
   margin-left: 20%;
   padding: 10px 4px;
 }
 
 .device .aphront-form-instructions,
 .phui-form-full-width .aphront-form-instructions {
   width: 100%;
   margin: 0;
 }
 
 .aphront-form-important {
   margin: .5em 0;
   background: #ffffdd;
   padding: .5em 1em;
 }
 .aphront-form-important code {
   display: block;
   padding: .25em;
   margin: .5em 2em;
 }
 
 .aphront-form-control-static .aphront-form-input,
 .aphront-form-control-markup .aphront-form-input {
   padding-top: 6px;
   font-size: 13px;
 }
 
 .aphront-form-control-togglebuttons .aphront-form-input {
   padding: 2px 0 0 0;
 }
 
 table.aphront-form-control-radio-layout,
 table.aphront-form-control-checkbox-layout {
   margin-top: 3px;
   font-size: 13px;
 }
 
 table.aphront-form-control-radio-layout th {
   padding-top: 3px;
   padding-left: 8px;
   padding-bottom: 4px;
   font-weight: bold;
   color: {$darkgreytext};
 }
 
 
 table.aphront-form-control-checkbox-layout th {
   padding-top: 2px;
   padding-left: 8px;
   padding-bottom: 4px;
   color: {$darkgreytext};
 }
 
 .aphront-form-control-radio-layout td input,
 .aphront-form-control-checkbox-layout td input {
   margin-top: 4px;
   width: auto;
 }
 
 .aphront-form-control-radio-layout label.disabled,
 .aphront-form-control-checkbox-layout label.disabled {
   color: {$greytext};
 }
 
 .aphront-form-radio-caption {
   margin-top: 4px;
   font-size: 12px;
   font-weight: normal;
   color: #555;
 }
 
 .aphront-form-control-image span {
   margin: 0 4px 0 2px;
 }
 
 .aphront-form-control-image .default-image {
   display: inline;
   width: 12px;
 }
 
 .aphront-form-input hr {
   border: none;
   background: #bbbbbb;
   height: 1px;
   position: relative;
 }
 
 .aphront-form-inset {
   margin: 0 0 8px;
   padding: 8px;
   background: #fff;
   border: 1px solid #d4dae0;
 }
 
 .aphront-form-inset h1 {
   color: {$greytext};
   font-weight: normal;
   padding-bottom: 8px;
 }
 
 .aphront-form-drag-and-drop-file-list {
   width: 400px;
 }
 
 .drag-and-drop-instructions {
   color: {$darkgreytext};
   font-size: 11px;
   padding: 6px 8px;
 }
 
 .drag-and-drop-file-target {
   border: 1px dashed #bfbfbf;
   padding-top: 12px;
   padding-bottom: 12px;
 }
 
 .aphront-textarea-drag-and-drop {
   background: {$lightgreen};
   border-color: {$green};
 }
 
 .aphront-form-crop .crop-box {
   cursor: move;
   overflow: hidden;
 }
 
 .aphront-form-crop .crop-box .crop-image {
   position: relative;
   top: 0px;
   left: 0px;
 }
 
 
 .calendar-button {
   display: inline;
   background: url(/rsrc/image/icon/fatcow/calendar_edit.png)
     no-repeat center center;
   padding: 8px 12px;
   margin: 2px 8px 2px 2px;
   position: relative;
   border: 1px solid transparent;
 }
 
 .aphront-form-date-container {
   position: relative;
   display: inline;
 }
 
 .aphront-form-date-container select {
   margin: 2px;
   display: inline;
 }
 .aphront-form-date-container input.aphront-form-date-enabled-input {
   width: auto;
   display: inline;
   margin-right: 8px;
   font-size: 16px;
 }
 
 .aphront-form-date-container input.aphront-form-date-time-input {
   width: 7em;
   display: inline;
 }
 
 .fancy-datepicker {
   position: absolute;
   width: 240px;
 }
 
 .fancy-datepicker-core {
   padding: 1px;
   font-size: 11px;
   font-family: Verdana;
   text-align: center;
 }
 
 .fancy-datepicker-core .month-table,
 .fancy-datepicker-core .day-table {
   margin: 0 auto;
   border-collapse: separate;
   border-spacing: 1px;
   width: 100%;
 }
 
 .fancy-datepicker-core .month-table {
   margin-bottom: 6px;
 }
 
 .fancy-datepicker-core .month-table td.lrbutton {
   width: 20%;
 }
 
 .fancy-datepicker-core .month-table td {
   padding: 4px;
   font-weight: bold;
   color: {$darkgreytext};
 }
 
 .fancy-datepicker-core .month-table td.lrbutton {
   background: #e6e6e6;
   border: 1px solid;
   border-color: #a6a6a6 #969696 #868686 #a6a6a6;
 }
 
 .fancy-datepicker-core .day-table td {
   overflow: hidden;
   background: #f6f6f6;
   vertical-align: center;
   text-align: center;
   border: 1px solid #d6d6d6;
   padding: 4px 0;
 }
 
 .fancy-datepicker-core .day-table td.day-placeholder {
   border-color: transparent;
   background: transparent;
 }
 
 .fancy-datepicker-core .day-table td.weekend {
   color: {$greytext};
   border-color: #e6e6e6;
 }
 
 .fancy-datepicker-core .day-table td.day-name {
   background: transparent;
   border: 1px transparent;
   vertical-align: bottom;
   color: {$lightgreytext};
 }
 
 .fancy-datepicker-core .day-table td.today {
   background: #eeee99;
   border-color: #aaaa66;
 }
 
 .fancy-datepicker-core .day-table td.datepicker-selected {
   background: #0099ff;
   border-color: #0066cc;
 }
 
 .fancy-datepicker-core td {
   cursor: pointer;
 }
 
 .fancy-datepicker-core td.novalue {
   cursor: inherit;
 }
 
 .picker-open .calendar-button,
 .fancy-datepicker-core {
   background-color: white;
   border: 1px solid {$greytext};
 
   box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.25);
 }
 
 .picker-open .calendar-button {
   border-left: 1px solid white;
 }
 
 .login-to-comment {
   margin: 12px;
 }
 
 .phui-form-divider hr {
   height: 1px;
   border: 0;
   background: #c0c0c0;
   width: 85%;
   margin: 15px auto;
 }
 
 .recaptcha_only_if_privacy {
   display: none;
 }
 
 .phabricator-standard-custom-field-header {
   font-size: 16px;
   color: {$bluetext};
   border-bottom: 1px solid {$lightbluetext};
   padding: 16px 0 4px;
   margin-bottom: 4px;
 }
 
 .device-desktop .text-with-submit-control-outer-bounds {
   position: relative;
 }
 
 .device-desktop .text-with-submit-control-text-bounds {
   position: absolute;
   left: 0;
   right: 184px;
 }
 
 .device-desktop .text-with-submit-control-submit-bounds {
   text-align: right;
 }
 
 .device-desktop .text-with-submit-control-submit {
   width: 180px;
 }
diff --git a/webroot/rsrc/js/core/behavior-workflow.js b/webroot/rsrc/js/core/behavior-workflow.js
index 1989771be1..47fed33fe6 100644
--- a/webroot/rsrc/js/core/behavior-workflow.js
+++ b/webroot/rsrc/js/core/behavior-workflow.js
@@ -1,57 +1,76 @@
 /**
  * @provides javelin-behavior-workflow
  * @requires javelin-behavior
  *           javelin-stratcom
  *           javelin-workflow
  *           javelin-dom
  */
 
 JX.behavior('workflow', function() {
 
+  // If a user clicks an alternate submit button, make sure it gets marshalled
+  // into the workflow.
+  JX.Stratcom.listen(
+    'click',
+    ['workflow', 'tag:form', 'alternate-submit-button'],
+    function(e) {
+      e.prevent();
+
+      var target = e.getNode('alternate-submit-button');
+      var form = e.getNode('tag:form');
+      var button = {};
+      button[target.name] = target.value || true;
+
+      JX.DOM.invoke(form, 'didSyntheticSubmit', {extra: button});
+    });
+
   // Listen for both real and synthetic submit events.
   JX.Stratcom.listen(
     ['submit', 'didSyntheticSubmit'],
     ['workflow', 'tag:form'],
     function(e) {
       if (JX.Stratcom.pass()) {
         return;
       }
 
+      var data = e.getData();
+      var extra = (data && data.extra) || {};
+
       // NOTE: We activate workflow if any parent node has the "workflow" sigil,
       // not just the <form /> itself.
 
       e.prevent();
-      JX.Workflow.newFromForm(e.getNode('tag:form')).start();
+      JX.Workflow.newFromForm(e.getNode('tag:form'), extra).start();
     });
 
   JX.Stratcom.listen(
     'click',
     ['workflow', 'tag:a'],
     function(e) {
       if (!e.isNormalClick()) {
         return;
       }
 
       // NOTE: As above, we want to activate workflow if a parent node has
       // the sigil, not just the <a /> that the user clicked. However, there
       // is an exception in this case: if the <a /> does not have workflow and
       // is inside a <form /> which does, we don't workflow it (this covers
       // things like "help" links in captions). Test if the node with the
       // workflow sigil is a form.
 
       var workflow_node = e.getNode('workflow');
       if (JX.DOM.isType(workflow_node, 'form')) {
         // This covers the case of an <a /> without workflow inside a <form />
         // with workflow.
         return;
       }
 
       if (JX.Stratcom.pass()) {
         return;
       }
 
       e.prevent();
       JX.Workflow.newFromLink(e.getNode('tag:a')).start();
     });
 
 });