diff --git a/resources/sprite/gradients/lightblue-header.png b/resources/sprite/gradients/lightblue-header.png
new file mode 100644
index 000000000..35006c91a
Binary files /dev/null and b/resources/sprite/gradients/lightblue-header.png differ
diff --git a/resources/sprite/manifest/gradient.json b/resources/sprite/manifest/gradient.json
index b70184131..4482167b4 100644
--- a/resources/sprite/manifest/gradient.json
+++ b/resources/sprite/manifest/gradient.json
@@ -1,55 +1,60 @@
 {
   "version" : 1,
   "sprites" : {
     "gradient-blue-header"      : {
       "name" : "gradient-blue-header",
       "rule" : ".gradient-blue-header",
       "hash" : "bcfc1d3e93ea8585af5b5ca52b08e944"
     },
     "gradient-breadcrumbs"      : {
       "name" : "gradient-breadcrumbs",
       "rule" : ".gradient-breadcrumbs",
       "hash" : "ed46fe9544216513a3958900c688a808"
     },
     "gradient-dark-grey-header" : {
       "name" : "gradient-dark-grey-header",
       "rule" : ".gradient-dark-grey-header",
       "hash" : "e8762dd2849410a7e4fba8f972f946ff"
     },
     "gradient-dark-menu-label"  : {
       "name" : "gradient-dark-menu-label",
       "rule" : ".gradient-dark-menu-label, .phabricator-dark-menu .phui-list-item-type-label",
       "hash" : "8a11efa454f788aa2419ed8c745dece2"
     },
     "gradient-green-header"     : {
       "name" : "gradient-green-header",
       "rule" : ".gradient-green-header",
       "hash" : "848b563e846e187b688e899a9d838e40"
     },
     "gradient-grey-header"      : {
       "name" : "gradient-grey-header",
       "rule" : ".gradient-grey-header",
       "hash" : "1c8f8d61984e3fc5a7e528b9bd4d484a"
     },
+    "gradient-lightblue-header" : {
+      "name" : "gradient-lightblue-header",
+      "rule" : ".gradient-lightblue-header",
+      "hash" : "b838d2eb15f9b620e82b4da240bf464a"
+    },
     "gradient-menu-label"       : {
       "name" : "gradient-menu-label",
       "rule" : ".gradient-menu-label, .phabricator-side-menu .phui-list-item-type-label",
       "hash" : "e2aa8e74c3b2c0b18de34d336d318b5c"
     },
     "gradient-red-header"       : {
       "name" : "gradient-red-header",
       "rule" : ".gradient-red-header",
       "hash" : "070a2e01f611bfaf5207be25eebdd6f2"
     },
     "gradient-yellow-header"    : {
       "name" : "gradient-yellow-header",
       "rule" : ".gradient-yellow-header",
       "hash" : "166ee67c5201416cfa598c1eb86bf92a"
     }
   },
   "scales"  : [
     1
   ],
   "header"  : "\/**\n * @provides sprite-gradient-css\n * @generated\n *\/\n\n.sprite-gradient, .phabricator-dark-menu .phui-list-item-type-label, .phabricator-side-menu .phui-list-item-type-label {\n  background-image: url(\/rsrc\/image\/sprite-gradient.png);\n  background-repeat: repeat-x;\n}\n\n\n",
   "type"    : "repeat-x"
 }
diff --git a/scripts/celerity_mapper.php b/scripts/celerity_mapper.php
index b6e3760b9..23506c4e6 100755
--- a/scripts/celerity_mapper.php
+++ b/scripts/celerity_mapper.php
@@ -1,411 +1,410 @@
 #!/usr/bin/env php
 <?php
 
 $package_spec = array(
   'javelin.pkg.js' => array(
     'javelin-util',
     'javelin-install',
     'javelin-event',
     'javelin-stratcom',
     'javelin-behavior',
     'javelin-resource',
     'javelin-request',
     'javelin-vector',
     'javelin-dom',
     'javelin-json',
     'javelin-uri',
     'javelin-workflow',
     'javelin-mask',
     'javelin-typeahead',
     'javelin-typeahead-normalizer',
     'javelin-typeahead-source',
     'javelin-typeahead-preloaded-source',
     'javelin-typeahead-ondemand-source',
     'javelin-tokenizer',
     'javelin-history',
   ),
   'core.pkg.js' => array(
     'javelin-behavior-aphront-basic-tokenizer',
     'javelin-behavior-workflow',
     'javelin-behavior-aphront-form-disable-on-submit',
     'phabricator-keyboard-shortcut-manager',
     'phabricator-keyboard-shortcut',
     'javelin-behavior-phabricator-keyboard-shortcuts',
     'javelin-behavior-refresh-csrf',
     'javelin-behavior-phabricator-watch-anchor',
     'javelin-behavior-phabricator-autofocus',
     'phabricator-menu-item',
     'phabricator-dropdown-menu',
     'phabricator-phtize',
     'javelin-behavior-phabricator-oncopy',
     'phabricator-tooltip',
     'javelin-behavior-phabricator-tooltips',
     'phabricator-prefab',
     'javelin-behavior-device',
     'javelin-behavior-toggle-class',
     'javelin-behavior-lightbox-attachments',
     'phabricator-busy',
     'javelin-aphlict',
     'phabricator-notification',
     'javelin-behavior-aphlict-listen',
     'javelin-behavior-phabricator-search-typeahead',
     'javelin-behavior-konami',
     'javelin-behavior-aphlict-dropdown',
     'javelin-behavior-history-install',
     'javelin-behavior-phabricator-gesture',
 
     'javelin-behavior-phabricator-active-nav',
     'javelin-behavior-phabricator-nav',
     'javelin-behavior-phabricator-remarkup-assist',
     'phabricator-textareautils',
     'phabricator-file-upload',
     'javelin-behavior-global-drag-and-drop',
     'javelin-behavior-phabricator-reveal-content',
     'phabricator-hovercard',
     'javelin-behavior-phabricator-hovercards',
   ),
   'core.pkg.css' => array(
     'phabricator-core-css',
     'phabricator-zindex-css',
     'phui-button-css',
     'phabricator-standard-page-view',
     'aphront-dialog-view-css',
-    'aphront-form-view-css',
+    'phui-form-view-css',
     'aphront-panel-view-css',
     'aphront-table-view-css',
     'aphront-tokenizer-control-css',
     'aphront-typeahead-control-css',
     'aphront-list-filter-view-css',
 
     'phabricator-jump-nav',
 
     'phabricator-remarkup-css',
     'syntax-highlighting-css',
     'aphront-pager-view-css',
     'phabricator-transaction-view-css',
     'aphront-tooltip-css',
     'phabricator-flag-css',
     'aphront-error-view-css',
 
     'sprite-icons-css',
     'sprite-gradient-css',
     'sprite-menu-css',
     'sprite-apps-large-css',
 
     'phabricator-main-menu-view',
     'phabricator-notification-css',
     'phabricator-notification-menu-css',
     'lightbox-attachment-css',
     'phabricator-header-view-css',
-    'phabricator-form-view-css',
     'phabricator-filetree-view-css',
     'phabricator-nav-view-css',
     'phabricator-side-menu-view-css',
     'phabricator-crumbs-view-css',
     'phabricator-object-item-list-view-css',
     'global-drag-and-drop-css',
     'phui-spacing-css',
     'phui-form-css',
     'phui-icon-view-css',
 
     'phabricator-application-launch-view-css',
     'phabricator-action-list-view-css',
     'phabricator-property-list-view-css',
     'phabricator-tag-view-css',
   ),
   'differential.pkg.css' => array(
     'differential-core-view-css',
     'differential-changeset-view-css',
     'differential-results-table-css',
     'differential-revision-history-css',
     'differential-revision-list-css',
     'differential-table-of-contents-css',
     'differential-revision-comment-css',
     'differential-revision-add-comment-css',
     'differential-revision-comment-list-css',
     'phabricator-object-selector-css',
     'phabricator-content-source-view-css',
     'differential-local-commits-view-css',
     'inline-comment-summary-css',
   ),
   'differential.pkg.js' => array(
     'phabricator-drag-and-drop-file-upload',
     'phabricator-shaped-request',
 
     'javelin-behavior-differential-feedback-preview',
     'javelin-behavior-differential-edit-inline-comments',
     'javelin-behavior-differential-populate',
     'javelin-behavior-differential-show-more',
     'javelin-behavior-differential-diff-radios',
     'javelin-behavior-differential-accept-with-errors',
     'javelin-behavior-differential-comment-jump',
     'javelin-behavior-differential-add-reviewers-and-ccs',
     'javelin-behavior-differential-keyboard-navigation',
     'javelin-behavior-aphront-drag-and-drop-textarea',
     'javelin-behavior-phabricator-object-selector',
     'javelin-behavior-repository-crossreference',
     'javelin-behavior-load-blame',
 
     'differential-inline-comment-editor',
     'javelin-behavior-differential-dropdown-menus',
     'javelin-behavior-differential-toggle-files',
     'javelin-behavior-differential-user-select',
   ),
   'diffusion.pkg.css' => array(
     'diffusion-commit-view-css',
     'diffusion-icons-css',
   ),
   'diffusion.pkg.js' => array(
     'javelin-behavior-diffusion-pull-lastmodified',
     'javelin-behavior-diffusion-commit-graph',
     'javelin-behavior-audit-preview',
   ),
   'maniphest.pkg.css' => array(
     'maniphest-task-summary-css',
     'maniphest-transaction-detail-css',
     'phabricator-project-tag-css',
   ),
   'maniphest.pkg.js' => array(
     'javelin-behavior-maniphest-batch-selector',
     'javelin-behavior-maniphest-transaction-controls',
     'javelin-behavior-maniphest-transaction-preview',
     'javelin-behavior-maniphest-transaction-expand',
     'javelin-behavior-maniphest-subpriority-editor',
   ),
   'darkconsole.pkg.js' => array(
     'javelin-behavior-dark-console',
     'javelin-behavior-error-log',
   ),
 );
 
 
 require_once dirname(__FILE__).'/__init_script__.php';
 
 $args = new PhutilArgumentParser($argv);
 $args->setTagline('map static resources');
 $args->setSynopsis(
   "**celerity_mapper.php** [--output __path__] [--with-custom] <webroot>");
 $args->parse(
   array(
     array(
       'name'     => 'output',
       'param'    => 'path',
       'default'  => '../src/__celerity_resource_map__.php',
       'help'     => "Set the path for resource map. It is usually useful for ".
                     "'celerity.resource-path' configuration.",
     ),
     array(
       'name'     => 'with-custom',
       'help'     => 'Include resources in <webroot>/rsrc/custom/.',
     ),
     array(
       'name'     => 'webroot',
       'wildcard' => true,
     ),
   ));
 
 $root = $args->getArg('webroot');
 if (count($root) != 1 || !is_dir(reset($root))) {
   $args->printHelpAndExit();
 }
 $root = Filesystem::resolvePath(reset($root));
 
 $celerity_path = Filesystem::resolvePath($args->getArg('output'), $root);
 $with_custom = $args->getArg('with-custom');
 
 $resource_hash = PhabricatorEnv::getEnvConfig('celerity.resource-hash');
 $runtime_map = array();
 
 echo "Finding raw static resources...\n";
 $finder = id(new FileFinder($root))
   ->withType('f')
   ->withSuffix('png')
   ->withSuffix('jpg')
   ->withSuffix('gif')
   ->withSuffix('swf')
   ->withFollowSymlinks(true)
   ->setGenerateChecksums(true);
 if (!$with_custom) {
   $finder->excludePath('./rsrc/custom');
 }
 $raw_files = $finder->find();
 
 echo "Processing ".count($raw_files)." files";
 foreach ($raw_files as $path => $hash) {
   echo ".";
   $path = '/'.Filesystem::readablePath($path, $root);
   $type = CelerityResourceTransformer::getResourceType($path);
 
   $hash = md5($hash.$path.$resource_hash);
   $uri  = '/res/'.substr($hash, 0, 8).$path;
 
   $runtime_map[$path] = array(
     'hash' => $hash,
     'uri'  => $uri,
     'disk' => $path,
     'type' => $type,
   );
 }
 echo "\n";
 
 $xformer = id(new CelerityResourceTransformer())
   ->setMinify(false)
   ->setRawResourceMap($runtime_map);
 
 echo "Finding transformable static resources...\n";
 $finder = id(new FileFinder($root))
   ->withType('f')
   ->withSuffix('js')
   ->withSuffix('css')
   ->withFollowSymlinks(true)
   ->setGenerateChecksums(true);
 if (!$with_custom) {
   $finder->excludePath('./rsrc/custom');
 }
 $files = $finder->find();
 
 echo "Processing ".count($files)." files";
 
 $file_map = array();
 foreach ($files as $path => $raw_hash) {
   echo ".";
   $path = '/'.Filesystem::readablePath($path, $root);
   $data = Filesystem::readFile($root.$path);
 
   $data = $xformer->transformResource($path, $data);
   $hash = md5($data);
   $hash = md5($hash.$path.$resource_hash);
 
   $file_map[$path] = array(
     'hash' => $hash,
     'disk' => $path,
   );
 }
 echo "\n";
 
 $resource_graph = array();
 $hash_map = array();
 
 $parser = new PhutilDocblockParser();
 foreach ($file_map as $path => $info) {
   $type = CelerityResourceTransformer::getResourceType($path);
 
   $data = Filesystem::readFile($root.$info['disk']);
   $matches = array();
   $ok = preg_match('@/[*][*].*?[*]/@s', $data, $matches);
   if (!$ok) {
     throw new Exception(
       "File {$path} does not have a header doc comment. Encode dependency ".
       "data in a header docblock.");
   }
 
   list($description, $metadata) = $parser->parse($matches[0]);
 
   $provides = preg_split('/\s+/', trim(idx($metadata, 'provides')));
   $requires = preg_split('/\s+/', trim(idx($metadata, 'requires')));
   $provides = array_filter($provides);
   $requires = array_filter($requires);
 
   if (!$provides) {
     // Tests and documentation-only JS is permitted to @provide no targets.
     continue;
   }
 
   if (count($provides) > 1) {
     throw new Exception(
       "File {$path} must @provide at most one Celerity target.");
   }
 
   $provides = reset($provides);
 
   $uri = '/res/'.substr($info['hash'], 0, 8).$path;
 
   $hash_map[$provides] = $info['hash'];
 
   $resource_graph[$provides] = $requires;
 
   $runtime_map[$provides] = array(
     'uri'       => $uri,
     'type'      => $type,
     'requires'  => $requires,
     'disk'      => $path,
   );
 }
 
 $celerity_resource_graph = new CelerityResourceGraph();
 $celerity_resource_graph->addNodes($resource_graph);
 $celerity_resource_graph->setResourceGraph($resource_graph);
 $celerity_resource_graph->loadGraph();
 
 foreach ($resource_graph as $provides => $requires) {
   $cycle = $celerity_resource_graph->detectCycles($provides);
   if ($cycle) {
     throw new Exception(
       "Cycle detected in resource graph: ". implode($cycle, " => ")
     );
   }
 }
 
 $package_map = array();
 foreach ($package_spec as $name => $package) {
   $hashes = array();
   $type = null;
   foreach ($package as $symbol) {
     if (empty($hash_map[$symbol])) {
       throw new Exception(
         "Package specification for '{$name}' includes '{$symbol}', but that ".
         "symbol is not defined anywhere.");
     }
     if ($type === null) {
       $type = $runtime_map[$symbol]['type'];
     } else {
       $ntype = $runtime_map[$symbol]['type'];
       if ($type !== $ntype) {
         throw new Exception(
           "Package specification for '{$name}' mixes resources of type ".
           "'{$type}' with resources of type '{$ntype}'. Each package may only ".
           "contain one type of resource.");
       }
     }
     $hashes[] = $symbol.':'.$hash_map[$symbol];
   }
   $key = substr(md5(implode("\n", $hashes)), 0, 8);
   $package_map['packages'][$key] = array(
     'name'    => $name,
     'symbols' => $package,
     'uri'     => '/res/pkg/'.$key.'/'.$name,
     'type'    => $type,
   );
   foreach ($package as $symbol) {
     $package_map['reverse'][$symbol] = $key;
   }
 }
 
 ksort($runtime_map);
 $runtime_map = var_export($runtime_map, true);
 $runtime_map = preg_replace('/\s+$/m', '', $runtime_map);
 $runtime_map = preg_replace('/array \(/', 'array(', $runtime_map);
 
 $package_map['packages'] = isort($package_map['packages'], 'name');
 ksort($package_map['reverse']);
 $package_map = var_export($package_map, true);
 $package_map = preg_replace('/\s+$/m', '', $package_map);
 $package_map = preg_replace('/array \(/', 'array(', $package_map);
 
 $generated = '@'.'generated';
 $resource_map = <<<EOFILE
 <?php
 
 /**
  * This file is automatically generated. Use 'celerity_mapper.php' to rebuild
  * it.
  * {$generated}
  */
 
 celerity_register_resource_map({$runtime_map}, {$package_map});
 
 EOFILE;
 
 echo "Writing map...\n";
 Filesystem::writeFile($celerity_path, $resource_map);
 echo "Done.\n";
diff --git a/src/__celerity_resource_map__.php b/src/__celerity_resource_map__.php
index 74d0ca354..5dbae02e0 100644
--- a/src/__celerity_resource_map__.php
+++ b/src/__celerity_resource_map__.php
@@ -1,4561 +1,4550 @@
 <?php
 
 /**
  * This file is automatically generated. Use 'celerity_mapper.php' to rebuild
  * it.
  * @generated
  */
 
 celerity_register_resource_map(array(
   '/rsrc/image/actions/edit.png' =>
   array(
     'hash' => 'ae90914d120ac3838ddc633b480343f3',
     'uri' => '/res/ae90914d/rsrc/image/actions/edit.png',
     'disk' => '/rsrc/image/actions/edit.png',
     'type' => 'png',
   ),
   '/rsrc/image/apple-touch-icon.png' =>
   array(
     'hash' => '3380adf2dd4a5efa0885618bc5943640',
     'uri' => '/res/3380adf2/rsrc/image/apple-touch-icon.png',
     'disk' => '/rsrc/image/apple-touch-icon.png',
     'type' => 'png',
   ),
   '/rsrc/image/avatar.png' =>
   array(
     'hash' => '1c5f255071537f05406adee86717ff27',
     'uri' => '/res/1c5f2550/rsrc/image/avatar.png',
     'disk' => '/rsrc/image/avatar.png',
     'type' => 'png',
   ),
   '/rsrc/image/checker_dark.png' =>
   array(
     'hash' => '640f795343df76ebe5409aae6187e57f',
     'uri' => '/res/640f7953/rsrc/image/checker_dark.png',
     'disk' => '/rsrc/image/checker_dark.png',
     'type' => 'png',
   ),
   '/rsrc/image/checker_light.png' =>
   array(
     'hash' => '7f8f3ef8beb0f2cc4cc69efb9e1c3308',
     'uri' => '/res/7f8f3ef8/rsrc/image/checker_light.png',
     'disk' => '/rsrc/image/checker_light.png',
     'type' => 'png',
   ),
   '/rsrc/image/credit_cards.png' =>
   array(
     'hash' => '681448de424ea159b6ea68af04c046ae',
     'uri' => '/res/681448de/rsrc/image/credit_cards.png',
     'disk' => '/rsrc/image/credit_cards.png',
     'type' => 'png',
   ),
   '/rsrc/image/darkload.gif' =>
   array(
     'hash' => '3a52cb7145d6e70f461fed21273117f2',
     'uri' => '/res/3a52cb71/rsrc/image/darkload.gif',
     'disk' => '/rsrc/image/darkload.gif',
     'type' => 'gif',
   ),
   '/rsrc/image/divot.png' =>
   array(
     'hash' => '3be267bd11ea375bf68e808893718e0e',
     'uri' => '/res/3be267bd/rsrc/image/divot.png',
     'disk' => '/rsrc/image/divot.png',
     'type' => 'png',
   ),
   '/rsrc/image/grippy_texture.png' =>
   array(
     'hash' => 'a8945e12ceeaddd5b491a8d81cfa19c1',
     'uri' => '/res/a8945e12/rsrc/image/grippy_texture.png',
     'disk' => '/rsrc/image/grippy_texture.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/arrow_branch.png' =>
   array(
     'hash' => 'f27b67520766e3d971722bcff703f3a8',
     'uri' => '/res/f27b6752/rsrc/image/icon/fatcow/arrow_branch.png',
     'disk' => '/rsrc/image/icon/fatcow/arrow_branch.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/arrow_merge.png' =>
   array(
     'hash' => 'c4bd97f3b1257439e2123ef69d2194d0',
     'uri' => '/res/c4bd97f3/rsrc/image/icon/fatcow/arrow_merge.png',
     'disk' => '/rsrc/image/icon/fatcow/arrow_merge.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/bullet_black.png' =>
   array(
     'hash' => 'c148284c84aa02ba1190dcf7e31c8985',
     'uri' => '/res/c148284c/rsrc/image/icon/fatcow/bullet_black.png',
     'disk' => '/rsrc/image/icon/fatcow/bullet_black.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/bullet_orange.png' =>
   array(
     'hash' => '397bd1c948d9aaac5e440a9270c3697a',
     'uri' => '/res/397bd1c9/rsrc/image/icon/fatcow/bullet_orange.png',
     'disk' => '/rsrc/image/icon/fatcow/bullet_orange.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/bullet_red.png' =>
   array(
     'hash' => '470e3b2c2ca84ebdd476271b681f421b',
     'uri' => '/res/470e3b2c/rsrc/image/icon/fatcow/bullet_red.png',
     'disk' => '/rsrc/image/icon/fatcow/bullet_red.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/calendar_edit.png' =>
   array(
     'hash' => 'de249c0f4f37bf5b2c69ff39ec5573fb',
     'uri' => '/res/de249c0f/rsrc/image/icon/fatcow/calendar_edit.png',
     'disk' => '/rsrc/image/icon/fatcow/calendar_edit.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/document_black.png' =>
   array(
     'hash' => '44d65a7f05a9c921719deedc160d68f7',
     'uri' => '/res/44d65a7f/rsrc/image/icon/fatcow/document_black.png',
     'disk' => '/rsrc/image/icon/fatcow/document_black.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_blue.png' =>
   array(
     'hash' => '75a080492f900fbe489e4b27e403962b',
     'uri' => '/res/75a08049/rsrc/image/icon/fatcow/flag_blue.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_blue.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_finish.png' =>
   array(
     'hash' => '4af11fc7fab8e4610cbc3c88a02d4f78',
     'uri' => '/res/4af11fc7/rsrc/image/icon/fatcow/flag_finish.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_finish.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_ghost.png' =>
   array(
     'hash' => '14c9f30a37b43f276f27a27a924bf02d',
     'uri' => '/res/14c9f30a/rsrc/image/icon/fatcow/flag_ghost.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_ghost.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_green.png' =>
   array(
     'hash' => 'fed01374cd396cb774872762dcc447e1',
     'uri' => '/res/fed01374/rsrc/image/icon/fatcow/flag_green.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_green.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_orange.png' =>
   array(
     'hash' => '88008cb8bb99761a37e5a743e2455aeb',
     'uri' => '/res/88008cb8/rsrc/image/icon/fatcow/flag_orange.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_orange.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_pink.png' =>
   array(
     'hash' => '2f199f06ffc3dfc81b7561a057e0bc33',
     'uri' => '/res/2f199f06/rsrc/image/icon/fatcow/flag_pink.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_pink.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_purple.png' =>
   array(
     'hash' => '16358629dc86c39550b575586eb5df80',
     'uri' => '/res/16358629/rsrc/image/icon/fatcow/flag_purple.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_purple.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_red.png' =>
   array(
     'hash' => '210c28b4d93c439a499f5814f5e05772',
     'uri' => '/res/210c28b4/rsrc/image/icon/fatcow/flag_red.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_red.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_yellow.png' =>
   array(
     'hash' => 'bdfd73744a80bb80329ae50bc8a5f962',
     'uri' => '/res/bdfd7374/rsrc/image/icon/fatcow/flag_yellow.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_yellow.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/folder.png' =>
   array(
     'hash' => '25e46cf9d210dde2242332296f79938c',
     'uri' => '/res/25e46cf9/rsrc/image/icon/fatcow/folder.png',
     'disk' => '/rsrc/image/icon/fatcow/folder.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/folder_go.png' =>
   array(
     'hash' => 'ba922ff7959309f51a14cb7ed5124d8b',
     'uri' => '/res/ba922ff7/rsrc/image/icon/fatcow/folder_go.png',
     'disk' => '/rsrc/image/icon/fatcow/folder_go.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/key_question.png' =>
   array(
     'hash' => '530a6448a4b91edec091a9292ccfd3d9',
     'uri' => '/res/530a6448/rsrc/image/icon/fatcow/key_question.png',
     'disk' => '/rsrc/image/icon/fatcow/key_question.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/link.png' =>
   array(
     'hash' => 'be1bea49b216548433014f3324902928',
     'uri' => '/res/be1bea49/rsrc/image/icon/fatcow/link.png',
     'disk' => '/rsrc/image/icon/fatcow/link.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/page_white_edit.png' =>
   array(
     'hash' => 'e7b7e7f2d9730bc80bc5c9eac1f3e36d',
     'uri' => '/res/e7b7e7f2/rsrc/image/icon/fatcow/page_white_edit.png',
     'disk' => '/rsrc/image/icon/fatcow/page_white_edit.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/page_white_link.png' =>
   array(
     'hash' => '1cfbad14412bda6c6f132dcc7c8725fd',
     'uri' => '/res/1cfbad14/rsrc/image/icon/fatcow/page_white_link.png',
     'disk' => '/rsrc/image/icon/fatcow/page_white_link.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/page_white_put.png' =>
   array(
     'hash' => 'bb7308aa5ac40137a8262da395a267fd',
     'uri' => '/res/bb7308aa/rsrc/image/icon/fatcow/page_white_put.png',
     'disk' => '/rsrc/image/icon/fatcow/page_white_put.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/page_white_text.png' =>
   array(
     'hash' => 'e47d590b626f617fb7d1d44e96e8fd11',
     'uri' => '/res/e47d590b/rsrc/image/icon/fatcow/page_white_text.png',
     'disk' => '/rsrc/image/icon/fatcow/page_white_text.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/source/conduit.png' =>
   array(
     'hash' => '1cae0656580aa3cd0b54b9d98306b1b9',
     'uri' => '/res/1cae0656/rsrc/image/icon/fatcow/source/conduit.png',
     'disk' => '/rsrc/image/icon/fatcow/source/conduit.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/source/email.png' =>
   array(
     'hash' => '93bdb3e168da1ed68f50c42125729d4e',
     'uri' => '/res/93bdb3e1/rsrc/image/icon/fatcow/source/email.png',
     'disk' => '/rsrc/image/icon/fatcow/source/email.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/source/fax.png' =>
   array(
     'hash' => 'd7dedf229841f2d041b347afd881596f',
     'uri' => '/res/d7dedf22/rsrc/image/icon/fatcow/source/fax.png',
     'disk' => '/rsrc/image/icon/fatcow/source/fax.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/source/mobile.png' =>
   array(
     'hash' => '786e7146d1e7d7318baf76c9d2baad97',
     'uri' => '/res/786e7146/rsrc/image/icon/fatcow/source/mobile.png',
     'disk' => '/rsrc/image/icon/fatcow/source/mobile.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/source/tablet.png' =>
   array(
     'hash' => '374cd40e4965be6b2fbdef4059d0ca05',
     'uri' => '/res/374cd40e/rsrc/image/icon/fatcow/source/tablet.png',
     'disk' => '/rsrc/image/icon/fatcow/source/tablet.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/source/web.png' =>
   array(
     'hash' => 'f4882a8f5619ba505ca033f72a340635',
     'uri' => '/res/f4882a8f/rsrc/image/icon/fatcow/source/web.png',
     'disk' => '/rsrc/image/icon/fatcow/source/web.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/default160x120.png' =>
   array(
     'hash' => '1b52ebd1fe0eee3ed0abfc382991b265',
     'uri' => '/res/1b52ebd1/rsrc/image/icon/fatcow/thumbnails/default160x120.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/default160x120.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/default60x45.png' =>
   array(
     'hash' => '048d851d8d1daad4754e891e734c1899',
     'uri' => '/res/048d851d/rsrc/image/icon/fatcow/thumbnails/default60x45.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/default60x45.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/image160x120.png' =>
   array(
     'hash' => '434acbd8dbbc2da9f09f6205a396eba1',
     'uri' => '/res/434acbd8/rsrc/image/icon/fatcow/thumbnails/image160x120.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/image160x120.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/image60x45.png' =>
   array(
     'hash' => '29f7872dc53588fe0b8f0b330c7ee23a',
     'uri' => '/res/29f7872d/rsrc/image/icon/fatcow/thumbnails/image60x45.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/image60x45.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/pdf160x120.png' =>
   array(
     'hash' => '39d2e22541658a3472ba41ae2fa548e5',
     'uri' => '/res/39d2e225/rsrc/image/icon/fatcow/thumbnails/pdf160x120.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/pdf160x120.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/pdf60x45.png' =>
   array(
     'hash' => 'b3572e9317cbed5184d12bdfabed2727',
     'uri' => '/res/b3572e93/rsrc/image/icon/fatcow/thumbnails/pdf60x45.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/pdf60x45.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/zip160x120.png' =>
   array(
     'hash' => 'e505108688a903b5cfb674707a289bcc',
     'uri' => '/res/e5051086/rsrc/image/icon/fatcow/thumbnails/zip160x120.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/zip160x120.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/zip60x45.png' =>
   array(
     'hash' => 'f00716f4e8f7a95e70d43504f06be0a6',
     'uri' => '/res/f00716f4/rsrc/image/icon/fatcow/thumbnails/zip60x45.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/zip60x45.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/lightbox/close-2.png' =>
   array(
     'hash' => '72ff3ddcc1ed5d19a715ed6242114b53',
     'uri' => '/res/72ff3ddc/rsrc/image/icon/lightbox/close-2.png',
     'disk' => '/rsrc/image/icon/lightbox/close-2.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/lightbox/close-hover-2.png' =>
   array(
     'hash' => '6ad4bd4a7820547a1d9041752546ba16',
     'uri' => '/res/6ad4bd4a/rsrc/image/icon/lightbox/close-hover-2.png',
     'disk' => '/rsrc/image/icon/lightbox/close-hover-2.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/lightbox/left-arrow-2.png' =>
   array(
     'hash' => 'd84cbb0d42739f87b8f25b2f1d2f1153',
     'uri' => '/res/d84cbb0d/rsrc/image/icon/lightbox/left-arrow-2.png',
     'disk' => '/rsrc/image/icon/lightbox/left-arrow-2.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/lightbox/left-arrow-hover-2.png' =>
   array(
     'hash' => 'cdf05f98fff3f390cd8df0c89894a3e1',
     'uri' => '/res/cdf05f98/rsrc/image/icon/lightbox/left-arrow-hover-2.png',
     'disk' => '/rsrc/image/icon/lightbox/left-arrow-hover-2.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/lightbox/right-arrow-2.png' =>
   array(
     'hash' => '52021038cb6995c71f62a804bc2d420d',
     'uri' => '/res/52021038/rsrc/image/icon/lightbox/right-arrow-2.png',
     'disk' => '/rsrc/image/icon/lightbox/right-arrow-2.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/lightbox/right-arrow-hover-2.png' =>
   array(
     'hash' => '65d5756b7b9cfcdeb2eb197a9aa6bbd2',
     'uri' => '/res/65d5756b/rsrc/image/icon/lightbox/right-arrow-hover-2.png',
     'disk' => '/rsrc/image/icon/lightbox/right-arrow-hover-2.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/subscribe.png' =>
   array(
     'hash' => '5f47a4b17de245af39a4e7a097e40623',
     'uri' => '/res/5f47a4b1/rsrc/image/icon/subscribe.png',
     'disk' => '/rsrc/image/icon/subscribe.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/tango/attachment.png' =>
   array(
     'hash' => '776fed2de89803fd8a0ba4b9deede230',
     'uri' => '/res/776fed2d/rsrc/image/icon/tango/attachment.png',
     'disk' => '/rsrc/image/icon/tango/attachment.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/tango/edit.png' =>
   array(
     'hash' => 'c0028d99dcf4e9559bbf3c88ce2d8a8d',
     'uri' => '/res/c0028d99/rsrc/image/icon/tango/edit.png',
     'disk' => '/rsrc/image/icon/tango/edit.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/tango/go-down.png' =>
   array(
     'hash' => '96862812cbb0445573c264dc057b8300',
     'uri' => '/res/96862812/rsrc/image/icon/tango/go-down.png',
     'disk' => '/rsrc/image/icon/tango/go-down.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/tango/log.png' =>
   array(
     'hash' => 'a6f72499bef279ff6807a7dbc5148f1e',
     'uri' => '/res/a6f72499/rsrc/image/icon/tango/log.png',
     'disk' => '/rsrc/image/icon/tango/log.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/tango/upload.png' =>
   array(
     'hash' => '8c11b63d6d99db3d7159c5d9a94e3062',
     'uri' => '/res/8c11b63d/rsrc/image/icon/tango/upload.png',
     'disk' => '/rsrc/image/icon/tango/upload.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/unsubscribe.png' =>
   array(
     'hash' => '29429ad65aa3af50b072b32087057361',
     'uri' => '/res/29429ad6/rsrc/image/icon/unsubscribe.png',
     'disk' => '/rsrc/image/icon/unsubscribe.png',
     'type' => 'png',
   ),
   '/rsrc/image/loading.gif' =>
   array(
     'hash' => '664297671941142f37d8c89e717ff2ce',
     'uri' => '/res/66429767/rsrc/image/loading.gif',
     'disk' => '/rsrc/image/loading.gif',
     'type' => 'gif',
   ),
   '/rsrc/image/loading/boating_24.gif' =>
   array(
     'hash' => '2cd349ded48d698ebe886ba97b2db0f7',
     'uri' => '/res/2cd349de/rsrc/image/loading/boating_24.gif',
     'disk' => '/rsrc/image/loading/boating_24.gif',
     'type' => 'gif',
   ),
   '/rsrc/image/loading/compass_24.gif' =>
   array(
     'hash' => '726c1ed4bf23446e044d6b9d28250a07',
     'uri' => '/res/726c1ed4/rsrc/image/loading/compass_24.gif',
     'disk' => '/rsrc/image/loading/compass_24.gif',
     'type' => 'gif',
   ),
   '/rsrc/image/loading/loading_24.gif' =>
   array(
     'hash' => 'd6dcc5e6111a44fb9a160fc27b19d85c',
     'uri' => '/res/d6dcc5e6/rsrc/image/loading/loading_24.gif',
     'disk' => '/rsrc/image/loading/loading_24.gif',
     'type' => 'gif',
   ),
   '/rsrc/image/loading/loading_48.gif' =>
   array(
     'hash' => 'cb6fc6eb9c0a0efaf589978029080c58',
     'uri' => '/res/cb6fc6eb/rsrc/image/loading/loading_48.gif',
     'disk' => '/rsrc/image/loading/loading_48.gif',
     'type' => 'gif',
   ),
   '/rsrc/image/loading/loading_d48.gif' =>
   array(
     'hash' => 'c5181f5e0ac8125ad9beda73fdf18e91',
     'uri' => '/res/c5181f5e/rsrc/image/loading/loading_d48.gif',
     'disk' => '/rsrc/image/loading/loading_d48.gif',
     'type' => 'gif',
   ),
   '/rsrc/image/loading/loading_w24.gif' =>
   array(
     'hash' => '231857d68736e9bdda6bdbaaf924b8da',
     'uri' => '/res/231857d6/rsrc/image/loading/loading_w24.gif',
     'disk' => '/rsrc/image/loading/loading_w24.gif',
     'type' => 'gif',
   ),
   '/rsrc/image/main_texture.png' =>
   array(
     'hash' => 'e34d8143384721be73ec9b7532a977ab',
     'uri' => '/res/e34d8143/rsrc/image/main_texture.png',
     'disk' => '/rsrc/image/main_texture.png',
     'type' => 'png',
   ),
   '/rsrc/image/menu_texture.png' =>
   array(
     'hash' => 'ad020b1529b3a3b3480ca9de1d5f1e40',
     'uri' => '/res/ad020b15/rsrc/image/menu_texture.png',
     'disk' => '/rsrc/image/menu_texture.png',
     'type' => 'png',
   ),
   '/rsrc/image/people/harding.png' =>
   array(
     'hash' => '818b035ace2c480aa8df7b7f11cef58b',
     'uri' => '/res/818b035a/rsrc/image/people/harding.png',
     'disk' => '/rsrc/image/people/harding.png',
     'type' => 'png',
   ),
   '/rsrc/image/people/jefferson.png' =>
   array(
     'hash' => '55fe807ff02f9320e595fb59442e2038',
     'uri' => '/res/55fe807f/rsrc/image/people/jefferson.png',
     'disk' => '/rsrc/image/people/jefferson.png',
     'type' => 'png',
   ),
   '/rsrc/image/people/lincoln.png' =>
   array(
     'hash' => '2363337947ab52fd5fda79e4a004e930',
     'uri' => '/res/23633379/rsrc/image/people/lincoln.png',
     'disk' => '/rsrc/image/people/lincoln.png',
     'type' => 'png',
   ),
   '/rsrc/image/people/mckinley.png' =>
   array(
     'hash' => '0b7b05dd47c49a0874670e5e8200bba8',
     'uri' => '/res/0b7b05dd/rsrc/image/people/mckinley.png',
     'disk' => '/rsrc/image/people/mckinley.png',
     'type' => 'png',
   ),
   '/rsrc/image/people/taft.png' =>
   array(
     'hash' => 'f3e47d45b59b0b009fd536dabae9a151',
     'uri' => '/res/f3e47d45/rsrc/image/people/taft.png',
     'disk' => '/rsrc/image/people/taft.png',
     'type' => 'png',
   ),
   '/rsrc/image/people/washington.png' =>
   array(
     'hash' => '01412761cab769f7993d69eba986d949',
     'uri' => '/res/01412761/rsrc/image/people/washington.png',
     'disk' => '/rsrc/image/people/washington.png',
     'type' => 'png',
   ),
   '/rsrc/image/phrequent_active.png' =>
   array(
     'hash' => '716cddc08630eaa33934b2008723cac0',
     'uri' => '/res/716cddc0/rsrc/image/phrequent_active.png',
     'disk' => '/rsrc/image/phrequent_active.png',
     'type' => 'png',
   ),
   '/rsrc/image/phrequent_inactive.png' =>
   array(
     'hash' => 'f9099683873c01c5de1dc6650bd668fe',
     'uri' => '/res/f9099683/rsrc/image/phrequent_inactive.png',
     'disk' => '/rsrc/image/phrequent_inactive.png',
     'type' => 'png',
   ),
   '/rsrc/image/search.png' =>
   array(
     'hash' => 'ff7da044e6f923b8f569dec11f97e5e5',
     'uri' => '/res/ff7da044/rsrc/image/search.png',
     'disk' => '/rsrc/image/search.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-actions-X2.png' =>
   array(
     'hash' => '06962a5e8bea98ba7418d1d6cabcd7dc',
     'uri' => '/res/06962a5e/rsrc/image/sprite-actions-X2.png',
     'disk' => '/rsrc/image/sprite-actions-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-actions.png' =>
   array(
     'hash' => 'd5dda5fab1e61b00538c9a4fa1ee94c8',
     'uri' => '/res/d5dda5fa/rsrc/image/sprite-actions.png',
     'disk' => '/rsrc/image/sprite-actions.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-apps-X2.png' =>
   array(
     'hash' => 'd12f41da14b7f0b5a364a59a65fc67cd',
     'uri' => '/res/d12f41da/rsrc/image/sprite-apps-X2.png',
     'disk' => '/rsrc/image/sprite-apps-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-apps-large-X2.png' =>
   array(
     'hash' => '0ad432a9b02c2a9228389e71c3f2b590',
     'uri' => '/res/0ad432a9/rsrc/image/sprite-apps-large-X2.png',
     'disk' => '/rsrc/image/sprite-apps-large-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-apps-large.png' =>
   array(
     'hash' => 'a3addc473c11d6597a922a4c7d943357',
     'uri' => '/res/a3addc47/rsrc/image/sprite-apps-large.png',
     'disk' => '/rsrc/image/sprite-apps-large.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-apps-xlarge.png' =>
   array(
     'hash' => '992d2c278b6a22c0fa874d457a252fbd',
     'uri' => '/res/992d2c27/rsrc/image/sprite-apps-xlarge.png',
     'disk' => '/rsrc/image/sprite-apps-xlarge.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-apps.png' =>
   array(
     'hash' => 'c801a581ebbb0db851cd6623d7b8f175',
     'uri' => '/res/c801a581/rsrc/image/sprite-apps.png',
     'disk' => '/rsrc/image/sprite-apps.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-conpherence-X2.png' =>
   array(
     'hash' => '5e47868b00933a9afb6c844e464e6b23',
     'uri' => '/res/5e47868b/rsrc/image/sprite-conpherence-X2.png',
     'disk' => '/rsrc/image/sprite-conpherence-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-conpherence.png' =>
   array(
     'hash' => 'ca51f1be25213262d68e626e4cab7f0f',
     'uri' => '/res/ca51f1be/rsrc/image/sprite-conpherence.png',
     'disk' => '/rsrc/image/sprite-conpherence.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-docs-X2.png' =>
   array(
     'hash' => '57d3286ce88133f3ec9240e35f6bb897',
     'uri' => '/res/57d3286c/rsrc/image/sprite-docs-X2.png',
     'disk' => '/rsrc/image/sprite-docs-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-docs.png' =>
   array(
     'hash' => 'b2b089072d6eddd831402a77c02b5736',
     'uri' => '/res/b2b08907/rsrc/image/sprite-docs.png',
     'disk' => '/rsrc/image/sprite-docs.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-gradient.png' =>
   array(
-    'hash' => 'a49d2e493dba4bea85bb202af528106a',
-    'uri' => '/res/a49d2e49/rsrc/image/sprite-gradient.png',
+    'hash' => 'c6c42387e625948e683d9d8c62ea1b7f',
+    'uri' => '/res/c6c42387/rsrc/image/sprite-gradient.png',
     'disk' => '/rsrc/image/sprite-gradient.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-icons-X2.png' =>
   array(
     'hash' => '2448b7e60f80e12eee6b11e5c540f7ef',
     'uri' => '/res/2448b7e6/rsrc/image/sprite-icons-X2.png',
     'disk' => '/rsrc/image/sprite-icons-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-icons.png' =>
   array(
     'hash' => '7caf2f6bd649d3ef86b33a25e061bf1a',
     'uri' => '/res/7caf2f6b/rsrc/image/sprite-icons.png',
     'disk' => '/rsrc/image/sprite-icons.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-login-X2.png' =>
   array(
     'hash' => 'cd7eb19a0428c6be90c48cd2329a35fc',
     'uri' => '/res/cd7eb19a/rsrc/image/sprite-login-X2.png',
     'disk' => '/rsrc/image/sprite-login-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-login.png' =>
   array(
     'hash' => '788be2fd8e1f80b9faec9f5cf4bd5f4b',
     'uri' => '/res/788be2fd/rsrc/image/sprite-login.png',
     'disk' => '/rsrc/image/sprite-login.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-menu-X2.png' =>
   array(
     'hash' => '63b649a6ccba7bf76bc9456dc5dfb12b',
     'uri' => '/res/63b649a6/rsrc/image/sprite-menu-X2.png',
     'disk' => '/rsrc/image/sprite-menu-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-menu.png' =>
   array(
     'hash' => 'e0e16618691d2cffe64e9c57843828ff',
     'uri' => '/res/e0e16618/rsrc/image/sprite-menu.png',
     'disk' => '/rsrc/image/sprite-menu.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-minicons-X2.png' =>
   array(
     'hash' => 'c420c6462f7e50ca9941ccc5dd9e3dec',
     'uri' => '/res/c420c646/rsrc/image/sprite-minicons-X2.png',
     'disk' => '/rsrc/image/sprite-minicons-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-minicons.png' =>
   array(
     'hash' => '168bb875933624b3080a1cc134e5b4ed',
     'uri' => '/res/168bb875/rsrc/image/sprite-minicons.png',
     'disk' => '/rsrc/image/sprite-minicons.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-payments.png' =>
   array(
     'hash' => '5ce73fb580609e7cda16832e3577b147',
     'uri' => '/res/5ce73fb5/rsrc/image/sprite-payments.png',
     'disk' => '/rsrc/image/sprite-payments.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-status-X2.png' =>
   array(
     'hash' => '6b9a56e989052bfb7139d637918cd227',
     'uri' => '/res/6b9a56e9/rsrc/image/sprite-status-X2.png',
     'disk' => '/rsrc/image/sprite-status-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-status.png' =>
   array(
     'hash' => 'b0a100328351732903d86185b001f057',
     'uri' => '/res/b0a10032/rsrc/image/sprite-status.png',
     'disk' => '/rsrc/image/sprite-status.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-tokens.png' =>
   array(
     'hash' => '67c46fd75c885b76ecbfe46e71a476cc',
     'uri' => '/res/67c46fd7/rsrc/image/sprite-tokens.png',
     'disk' => '/rsrc/image/sprite-tokens.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/card-gradient.png' =>
   array(
     'hash' => '268b7fdd758d4bf99db8de6770aae8af',
     'uri' => '/res/268b7fdd/rsrc/image/texture/card-gradient.png',
     'disk' => '/rsrc/image/texture/card-gradient.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/dark-menu-hover.png' =>
   array(
     'hash' => 'a214a732644be34872e895b338b5d639',
     'uri' => '/res/a214a732/rsrc/image/texture/dark-menu-hover.png',
     'disk' => '/rsrc/image/texture/dark-menu-hover.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/dark-menu.png' =>
   array(
     'hash' => '41ee673a762cec48a154b456ad5ac204',
     'uri' => '/res/41ee673a/rsrc/image/texture/dark-menu.png',
     'disk' => '/rsrc/image/texture/dark-menu.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/grip.png' =>
   array(
     'hash' => 'f11bc231d241f1335cfca2933ad234e0',
     'uri' => '/res/f11bc231/rsrc/image/texture/grip.png',
     'disk' => '/rsrc/image/texture/grip.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/panel-header-gradient.png' =>
   array(
     'hash' => 'ad9204dd3ef5b12b645d80677d8ccead',
     'uri' => '/res/ad9204dd/rsrc/image/texture/panel-header-gradient.png',
     'disk' => '/rsrc/image/texture/panel-header-gradient.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/phlnx-bg.png' =>
   array(
     'hash' => 'a55a694da8b3874ca7a3105b7818f3a0',
     'uri' => '/res/a55a694d/rsrc/image/texture/phlnx-bg.png',
     'disk' => '/rsrc/image/texture/phlnx-bg.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/pholio-background.gif' =>
   array(
     'hash' => 'cf4561af116edf393dc583e5119fb412',
     'uri' => '/res/cf4561af/rsrc/image/texture/pholio-background.gif',
     'disk' => '/rsrc/image/texture/pholio-background.gif',
     'type' => 'gif',
   ),
   '/rsrc/image/texture/table_header.png' =>
   array(
     'hash' => '4ed3f56a30d3749e8f62052b9735a316',
     'uri' => '/res/4ed3f56a/rsrc/image/texture/table_header.png',
     'disk' => '/rsrc/image/texture/table_header.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/table_header_hover.png' =>
   array(
     'hash' => 'ea1f71a604e9b4859de1e25751540437',
     'uri' => '/res/ea1f71a6/rsrc/image/texture/table_header_hover.png',
     'disk' => '/rsrc/image/texture/table_header_hover.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/table_header_tall.png' =>
   array(
     'hash' => 'b05525601f78d759f1c5e47fd9c1a8aa',
     'uri' => '/res/b0552560/rsrc/image/texture/table_header_tall.png',
     'disk' => '/rsrc/image/texture/table_header_tall.png',
     'type' => 'png',
   ),
   '/rsrc/swf/aphlict.swf' =>
   array(
     'hash' => '4b9a9d83bebaf254f3790e87b45c1f92',
     'uri' => '/res/4b9a9d83/rsrc/swf/aphlict.swf',
     'disk' => '/rsrc/swf/aphlict.swf',
     'type' => 'swf',
   ),
   'aphront-bars' =>
   array(
     'uri' => '/res/95a907d6/rsrc/css/aphront/aphront-bars.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/aphront-bars.css',
   ),
   'aphront-calendar-view-css' =>
   array(
     'uri' => '/res/ae6f5b54/rsrc/css/aphront/calendar-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/calendar-view.css',
   ),
   'aphront-contextbar-view-css' =>
   array(
     'uri' => '/res/ecfd5ba9/rsrc/css/aphront/context-bar.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/context-bar.css',
   ),
   'aphront-dark-console-css' =>
   array(
     'uri' => '/res/0d316573/rsrc/css/aphront/dark-console.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/dark-console.css',
   ),
   'aphront-dialog-view-css' =>
   array(
-    'uri' => '/res/29a054fd/rsrc/css/aphront/dialog-view.css',
+    'uri' => '/res/c7a7e179/rsrc/css/aphront/dialog-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/dialog-view.css',
   ),
   'aphront-error-view-css' =>
   array(
-    'uri' => '/res/e2bb50c4/rsrc/css/aphront/error-view.css',
+    'uri' => '/res/4ba306a0/rsrc/css/aphront/error-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/error-view.css',
   ),
-  'aphront-form-view-css' =>
-  array(
-    'uri' => '/res/1be2545a/rsrc/css/aphront/form-view.css',
-    'type' => 'css',
-    'requires' =>
-    array(
-    ),
-    'disk' => '/rsrc/css/aphront/form-view.css',
-  ),
   'aphront-list-filter-view-css' =>
   array(
-    'uri' => '/res/a90a0c94/rsrc/css/aphront/list-filter-view.css',
+    'uri' => '/res/9fd0aae6/rsrc/css/aphront/list-filter-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/list-filter-view.css',
   ),
   'aphront-multi-column-view-css' =>
   array(
     'uri' => '/res/f7f25fb7/rsrc/css/aphront/multi-column.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/multi-column.css',
   ),
   'aphront-notes' =>
   array(
     'uri' => '/res/5b8ebfa0/rsrc/css/aphront/aphront-notes.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/aphront-notes.css',
   ),
   'aphront-pager-view-css' =>
   array(
     'uri' => '/res/43fb79f0/rsrc/css/aphront/pager-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/pager-view.css',
   ),
   'aphront-panel-view-css' =>
   array(
-    'uri' => '/res/f55024c3/rsrc/css/aphront/panel-view.css',
+    'uri' => '/res/e19deae5/rsrc/css/aphront/panel-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/panel-view.css',
   ),
   'aphront-request-failure-view-css' =>
   array(
     'uri' => '/res/c9a43002/rsrc/css/aphront/request-failure-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/request-failure-view.css',
   ),
   'aphront-table-view-css' =>
   array(
     'uri' => '/res/be5ca6be/rsrc/css/aphront/table-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/table-view.css',
   ),
   'aphront-tokenizer-control-css' =>
   array(
     'uri' => '/res/793c5f36/rsrc/css/aphront/tokenizer.css',
     'type' => 'css',
     'requires' =>
     array(
       0 => 'aphront-typeahead-control-css',
     ),
     'disk' => '/rsrc/css/aphront/tokenizer.css',
   ),
   'aphront-tooltip-css' =>
   array(
     'uri' => '/res/3a7d8e07/rsrc/css/aphront/tooltip.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/tooltip.css',
   ),
   'aphront-two-column-view-css' =>
   array(
     'uri' => '/res/4263aa98/rsrc/css/aphront/two-column.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/two-column.css',
   ),
   'aphront-typeahead-control-css' =>
   array(
     'uri' => '/res/e4a4cd4b/rsrc/css/aphront/typeahead.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/typeahead.css',
   ),
   'auth-css' =>
   array(
     'uri' => '/res/751cacaa/rsrc/css/application/auth/auth.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/auth/auth.css',
   ),
   'config-options-css' =>
   array(
     'uri' => '/res/be77d5a6/rsrc/css/application/config/config-options.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/config/config-options.css',
   ),
   'conpherence-menu-css' =>
   array(
     'uri' => '/res/cae40b18/rsrc/css/application/conpherence/menu.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/conpherence/menu.css',
   ),
   'conpherence-message-pane-css' =>
   array(
-    'uri' => '/res/80cde760/rsrc/css/application/conpherence/message-pane.css',
+    'uri' => '/res/4f3bfae5/rsrc/css/application/conpherence/message-pane.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/conpherence/message-pane.css',
   ),
   'conpherence-notification-css' =>
   array(
     'uri' => '/res/232c8cdb/rsrc/css/application/conpherence/notification.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/conpherence/notification.css',
   ),
   'conpherence-update-css' =>
   array(
     'uri' => '/res/92094ed7/rsrc/css/application/conpherence/update.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/conpherence/update.css',
   ),
   'conpherence-widget-pane-css' =>
   array(
     'uri' => '/res/ee9d5004/rsrc/css/application/conpherence/widget-pane.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/conpherence/widget-pane.css',
   ),
   'differential-changeset-view-css' =>
   array(
     'uri' => '/res/b8e183f8/rsrc/css/application/differential/changeset-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/changeset-view.css',
   ),
   'differential-core-view-css' =>
   array(
     'uri' => '/res/85fe5117/rsrc/css/application/differential/core.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/core.css',
   ),
   'differential-inline-comment-editor' =>
   array(
     'uri' => '/res/37e0564f/rsrc/js/application/differential/DifferentialInlineCommentEditor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-dom',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
       3 => 'javelin-install',
       4 => 'javelin-request',
       5 => 'javelin-workflow',
     ),
     'disk' => '/rsrc/js/application/differential/DifferentialInlineCommentEditor.js',
   ),
   'differential-local-commits-view-css' =>
   array(
     'uri' => '/res/224f3703/rsrc/css/application/differential/local-commits-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/local-commits-view.css',
   ),
   'differential-results-table-css' =>
   array(
     'uri' => '/res/aab3123c/rsrc/css/application/differential/results-table.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/results-table.css',
   ),
   'differential-revision-add-comment-css' =>
   array(
     'uri' => '/res/849748d3/rsrc/css/application/differential/add-comment.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/add-comment.css',
   ),
   'differential-revision-comment-css' =>
   array(
     'uri' => '/res/42c222f4/rsrc/css/application/differential/revision-comment.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/revision-comment.css',
   ),
   'differential-revision-comment-list-css' =>
   array(
     'uri' => '/res/3b31faa3/rsrc/css/application/differential/revision-comment-list.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/revision-comment-list.css',
   ),
   'differential-revision-history-css' =>
   array(
     'uri' => '/res/d41bc64c/rsrc/css/application/differential/revision-history.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/revision-history.css',
   ),
   'differential-revision-list-css' =>
   array(
     'uri' => '/res/fe6c4721/rsrc/css/application/differential/revision-list.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/revision-list.css',
   ),
   'differential-table-of-contents-css' =>
   array(
     'uri' => '/res/4fde8bfc/rsrc/css/application/differential/table-of-contents.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/table-of-contents.css',
   ),
   'diffusion-commit-view-css' =>
   array(
     'uri' => '/res/b445944e/rsrc/css/application/diffusion/commit-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/diffusion/commit-view.css',
   ),
   'diffusion-icons-css' =>
   array(
     'uri' => '/res/b93e32c9/rsrc/css/application/diffusion/diffusion-icons.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/diffusion/diffusion-icons.css',
   ),
   'diffusion-source-css' =>
   array(
     'uri' => '/res/162c8794/rsrc/css/application/diffusion/diffusion-source.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/diffusion/diffusion-source.css',
   ),
   'global-drag-and-drop-css' =>
   array(
     'uri' => '/res/4e24cb65/rsrc/css/application/files/global-drag-and-drop.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/files/global-drag-and-drop.css',
   ),
   'herald-css' =>
   array(
     'uri' => '/res/2150a55d/rsrc/css/application/herald/herald.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/herald/herald.css',
   ),
   'herald-rule-editor' =>
   array(
     'uri' => '/res/f8ee0e9c/rsrc/js/application/herald/HeraldRuleEditor.js',
     'type' => 'js',
     'requires' =>
     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',
     ),
     'disk' => '/rsrc/js/application/herald/HeraldRuleEditor.js',
   ),
   'herald-test-css' =>
   array(
     'uri' => '/res/c0cd6bdb/rsrc/css/application/herald/herald-test.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/herald/herald-test.css',
   ),
   'inline-comment-summary-css' =>
   array(
     'uri' => '/res/338704f7/rsrc/css/application/diff/inline-comment-summary.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/diff/inline-comment-summary.css',
   ),
   'javelin-aphlict' =>
   array(
     'uri' => '/res/c0b9e53f/rsrc/js/application/aphlict/Aphlict.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/application/aphlict/Aphlict.js',
   ),
   'javelin-behavior' =>
   array(
     'uri' => '/res/15482715/rsrc/externals/javelin/lib/behavior.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-magical-init',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/lib/behavior.js',
   ),
   'javelin-behavior-aphlict-dropdown' =>
   array(
     'uri' => '/res/3ff0c90a/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-request',
       2 => 'javelin-stratcom',
       3 => 'javelin-vector',
       4 => 'javelin-dom',
       5 => 'javelin-uri',
     ),
     'disk' => '/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js',
   ),
   'javelin-behavior-aphlict-listen' =>
   array(
     'uri' => '/res/7487f207/rsrc/js/application/aphlict/behavior-aphlict-listen.js',
     'type' => 'js',
     'requires' =>
     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',
     ),
     'disk' => '/rsrc/js/application/aphlict/behavior-aphlict-listen.js',
   ),
   'javelin-behavior-aphront-basic-tokenizer' =>
   array(
     'uri' => '/res/c7fd9a7b/rsrc/js/core/behavior-tokenizer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'phabricator-prefab',
     ),
     'disk' => '/rsrc/js/core/behavior-tokenizer.js',
   ),
   'javelin-behavior-aphront-crop' =>
   array(
     'uri' => '/res/8c800f36/rsrc/js/core/behavior-crop.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-vector',
       3 => 'javelin-magical-init',
     ),
     'disk' => '/rsrc/js/core/behavior-crop.js',
   ),
   'javelin-behavior-aphront-drag-and-drop-textarea' =>
   array(
     'uri' => '/res/a261f6e6/rsrc/js/core/behavior-drag-and-drop-textarea.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phabricator-drag-and-drop-file-upload',
       3 => 'phabricator-textareautils',
     ),
     'disk' => '/rsrc/js/core/behavior-drag-and-drop-textarea.js',
   ),
   'javelin-behavior-aphront-form-disable-on-submit' =>
   array(
     'uri' => '/res/a4a4ff07/rsrc/js/core/behavior-form.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-form.js',
   ),
   'javelin-behavior-aphront-more' =>
   array(
     'uri' => '/res/fae13324/rsrc/js/core/behavior-more.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-more.js',
   ),
   'javelin-behavior-audit-preview' =>
   array(
     'uri' => '/res/d8f31e46/rsrc/js/application/diffusion/behavior-audit-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-audit-preview.js',
   ),
   'javelin-behavior-balanced-payment-form' =>
   array(
     'uri' => '/res/6876492d/rsrc/js/application/phortune/behavior-balanced-payment-form.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phortune-credit-card-form',
     ),
     'disk' => '/rsrc/js/application/phortune/behavior-balanced-payment-form.js',
   ),
   'javelin-behavior-config-reorder-fields' =>
   array(
     'uri' => '/res/691c5c8c/rsrc/js/application/config/behavior-reorder-fields.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-json',
       4 => 'phabricator-draggable-list',
     ),
     'disk' => '/rsrc/js/application/config/behavior-reorder-fields.js',
   ),
   'javelin-behavior-conpherence-menu' =>
   array(
     'uri' => '/res/f27205d4/rsrc/js/application/conpherence/behavior-menu.js',
     'type' => 'js',
     'requires' =>
     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',
     ),
     'disk' => '/rsrc/js/application/conpherence/behavior-menu.js',
   ),
   'javelin-behavior-conpherence-pontificate' =>
   array(
     'uri' => '/res/19cb581b/rsrc/js/application/conpherence/behavior-pontificate.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-workflow',
       4 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/application/conpherence/behavior-pontificate.js',
   ),
   'javelin-behavior-conpherence-widget-pane' =>
   array(
     'uri' => '/res/562ca20e/rsrc/js/application/conpherence/behavior-widget-pane.js',
     'type' => 'js',
     'requires' =>
     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',
     ),
     'disk' => '/rsrc/js/application/conpherence/behavior-widget-pane.js',
   ),
   'javelin-behavior-countdown-timer' =>
   array(
     'uri' => '/res/13d40efa/rsrc/js/application/countdown/timer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/countdown/timer.js',
   ),
   'javelin-behavior-dark-console' =>
   array(
     'uri' => '/res/1e2c7a5e/rsrc/js/core/behavior-dark-console.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-util',
       3 => 'javelin-dom',
       4 => 'javelin-request',
       5 => 'phabricator-keyboard-shortcut',
     ),
     'disk' => '/rsrc/js/core/behavior-dark-console.js',
   ),
   'javelin-behavior-device' =>
   array(
     'uri' => '/res/12e43f5a/rsrc/js/core/behavior-device.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
       4 => 'javelin-install',
     ),
     'disk' => '/rsrc/js/core/behavior-device.js',
   ),
   'javelin-behavior-differential-accept-with-errors' =>
   array(
     'uri' => '/res/8fea67b3/rsrc/js/application/differential/behavior-accept-with-errors.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-accept-with-errors.js',
   ),
   'javelin-behavior-differential-add-reviewers-and-ccs' =>
   array(
     'uri' => '/res/fd9f2c1c/rsrc/js/application/differential/behavior-add-reviewers-and-ccs.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phabricator-prefab',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-add-reviewers-and-ccs.js',
   ),
   'javelin-behavior-differential-comment-jump' =>
   array(
     'uri' => '/res/8ffb4222/rsrc/js/application/differential/behavior-comment-jump.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-comment-jump.js',
   ),
   'javelin-behavior-differential-diff-radios' =>
   array(
     'uri' => '/res/004cb66f/rsrc/js/application/differential/behavior-diff-radios.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-diff-radios.js',
   ),
   'javelin-behavior-differential-dropdown-menus' =>
   array(
     'uri' => '/res/722c679c/rsrc/js/application/differential/behavior-dropdown-menus.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-stratcom',
       4 => 'phabricator-dropdown-menu',
       5 => 'phabricator-menu-item',
       6 => 'phabricator-phtize',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-dropdown-menus.js',
   ),
   'javelin-behavior-differential-edit-inline-comments' =>
   array(
     'uri' => '/res/86f459a4/rsrc/js/application/differential/behavior-edit-inline-comments.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-util',
       4 => 'javelin-vector',
       5 => 'differential-inline-comment-editor',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-edit-inline-comments.js',
   ),
   'javelin-behavior-differential-feedback-preview' =>
   array(
     'uri' => '/res/4421fac6/rsrc/js/application/differential/behavior-comment-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-request',
       4 => 'javelin-util',
       5 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-comment-preview.js',
   ),
   'javelin-behavior-differential-keyboard-navigation' =>
   array(
     'uri' => '/res/22ed93ba/rsrc/js/application/differential/behavior-keyboard-nav.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'phabricator-keyboard-shortcut',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-keyboard-nav.js',
   ),
   'javelin-behavior-differential-populate' =>
   array(
     'uri' => '/res/bb9a29f4/rsrc/js/application/differential/behavior-populate.js',
     'type' => 'js',
     'requires' =>
     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',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-populate.js',
   ),
   'javelin-behavior-differential-show-all-comments' =>
   array(
     'uri' => '/res/8801848d/rsrc/js/application/differential/behavior-show-all-comments.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-show-all-comments.js',
   ),
   'javelin-behavior-differential-show-field-details' =>
   array(
     'uri' => '/res/8d57f459/rsrc/js/application/differential/behavior-show-field-details.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-show-field-details.js',
   ),
   'javelin-behavior-differential-show-more' =>
   array(
     'uri' => '/res/b9f93090/rsrc/js/application/differential/behavior-show-more.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-workflow',
       3 => 'javelin-util',
       4 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-show-more.js',
   ),
   'javelin-behavior-differential-toggle-files' =>
   array(
     'uri' => '/res/beb89813/rsrc/js/application/differential/behavior-toggle-files.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'phabricator-phtize',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-toggle-files.js',
   ),
   'javelin-behavior-differential-user-select' =>
   array(
     'uri' => '/res/23c51a5d/rsrc/js/application/differential/behavior-user-select.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-user-select.js',
   ),
   'javelin-behavior-diffusion-commit-branches' =>
   array(
     'uri' => '/res/1ede335a/rsrc/js/application/diffusion/behavior-commit-branches.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-request',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-commit-branches.js',
   ),
   'javelin-behavior-diffusion-commit-graph' =>
   array(
     'uri' => '/res/536b8483/rsrc/js/application/diffusion/behavior-commit-graph.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-commit-graph.js',
   ),
   'javelin-behavior-diffusion-jump-to' =>
   array(
     'uri' => '/res/bade44bd/rsrc/js/application/diffusion/behavior-jump-to.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-vector',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-jump-to.js',
   ),
   'javelin-behavior-diffusion-pull-lastmodified' =>
   array(
     'uri' => '/res/29fe2790/rsrc/js/application/diffusion/behavior-pull-lastmodified.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-request',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-pull-lastmodified.js',
   ),
   'javelin-behavior-doorkeeper-tag' =>
   array(
     'uri' => '/res/59480572/rsrc/js/application/doorkeeper/behavior-doorkeeper-tag.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-json',
       3 => 'javelin-workflow',
       4 => 'javelin-magical-init',
     ),
     'disk' => '/rsrc/js/application/doorkeeper/behavior-doorkeeper-tag.js',
   ),
   'javelin-behavior-error-log' =>
   array(
     'uri' => '/res/acefdea7/rsrc/js/core/behavior-error-log.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-error-log.js',
   ),
   'javelin-behavior-fancy-datepicker' =>
   array(
     'uri' => '/res/dcd7c2ca/rsrc/js/core/behavior-fancy-datepicker.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-stratcom',
       4 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/core/behavior-fancy-datepicker.js',
   ),
   'javelin-behavior-global-drag-and-drop' =>
   array(
     'uri' => '/res/ee8e9c39/rsrc/js/core/behavior-global-drag-and-drop.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-uri',
       3 => 'javelin-mask',
       4 => 'phabricator-drag-and-drop-file-upload',
     ),
     'disk' => '/rsrc/js/core/behavior-global-drag-and-drop.js',
   ),
   'javelin-behavior-herald-rule-editor' =>
   array(
     'uri' => '/res/77a0c945/rsrc/js/application/herald/herald-rule-editor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'herald-rule-editor',
       1 => 'javelin-behavior',
     ),
     'disk' => '/rsrc/js/application/herald/herald-rule-editor.js',
   ),
   'javelin-behavior-history-install' =>
   array(
     'uri' => '/res/9099a161/rsrc/js/core/behavior-history-install.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-history',
     ),
     'disk' => '/rsrc/js/core/behavior-history-install.js',
   ),
   'javelin-behavior-konami' =>
   array(
     'uri' => '/res/b7bb7c24/rsrc/js/core/behavior-konami.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/core/behavior-konami.js',
   ),
   'javelin-behavior-lightbox-attachments' =>
   array(
     'uri' => '/res/72b4d3a8/rsrc/js/core/behavior-lightbox-attachments.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-mask',
       4 => 'javelin-util',
       5 => 'phabricator-busy',
     ),
     'disk' => '/rsrc/js/core/behavior-lightbox-attachments.js',
   ),
   'javelin-behavior-line-chart' =>
   array(
     'uri' => '/res/1aa5ac88/rsrc/js/application/maniphest/behavior-line-chart.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-line-chart.js',
   ),
   'javelin-behavior-load-blame' =>
   array(
     'uri' => '/res/138e2961/rsrc/js/application/diffusion/behavior-load-blame.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-request',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-load-blame.js',
   ),
   'javelin-behavior-maniphest-batch-editor' =>
   array(
     'uri' => '/res/81b2b86f/rsrc/js/application/maniphest/behavior-batch-editor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-prefab',
       4 => 'multirow-row-manager',
       5 => 'javelin-json',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-batch-editor.js',
   ),
   'javelin-behavior-maniphest-batch-selector' =>
   array(
     'uri' => '/res/c33cb5e3/rsrc/js/application/maniphest/behavior-batch-selector.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-batch-selector.js',
   ),
   'javelin-behavior-maniphest-list-editor' =>
   array(
     'uri' => '/res/a251e72f/rsrc/js/application/maniphest/behavior-list-edit.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-workflow',
       4 => 'javelin-fx',
       5 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-list-edit.js',
   ),
   'javelin-behavior-maniphest-subpriority-editor' =>
   array(
     'uri' => '/res/99d84c61/rsrc/js/application/maniphest/behavior-subpriorityeditor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-workflow',
       4 => 'phabricator-draggable-list',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-subpriorityeditor.js',
   ),
   'javelin-behavior-maniphest-transaction-controls' =>
   array(
     'uri' => '/res/e8498688/rsrc/js/application/maniphest/behavior-transaction-controls.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phabricator-prefab',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-transaction-controls.js',
   ),
   'javelin-behavior-maniphest-transaction-expand' =>
   array(
     'uri' => '/res/966410de/rsrc/js/application/maniphest/behavior-transaction-expand.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-workflow',
       3 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-transaction-expand.js',
   ),
   'javelin-behavior-maniphest-transaction-preview' =>
   array(
     'uri' => '/res/9447a3f9/rsrc/js/application/maniphest/behavior-transaction-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-json',
       4 => 'javelin-stratcom',
       5 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-transaction-preview.js',
   ),
   'javelin-behavior-owners-path-editor' =>
   array(
     'uri' => '/res/9cf78ffc/rsrc/js/application/owners/owners-path-editor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'owners-path-editor',
       1 => 'javelin-behavior',
     ),
     'disk' => '/rsrc/js/application/owners/owners-path-editor.js',
   ),
   'javelin-behavior-phabricator-active-nav' =>
   array(
     'uri' => '/res/9c8d3df8/rsrc/js/core/behavior-active-nav.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-vector',
       3 => 'javelin-dom',
       4 => 'javelin-uri',
     ),
     'disk' => '/rsrc/js/core/behavior-active-nav.js',
   ),
   'javelin-behavior-phabricator-autofocus' =>
   array(
     'uri' => '/res/bf92b8d6/rsrc/js/core/behavior-autofocus.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-autofocus.js',
   ),
   'javelin-behavior-phabricator-busy-example' =>
   array(
     'uri' => '/res/dbe12f2f/rsrc/js/application/uiexample/busy-example.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'phabricator-busy',
       1 => 'javelin-behavior',
     ),
     'disk' => '/rsrc/js/application/uiexample/busy-example.js',
   ),
   'javelin-behavior-phabricator-file-tree' =>
   array(
     'uri' => '/res/e5bf93df/rsrc/js/core/behavior-file-tree.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'phabricator-keyboard-shortcut',
       2 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/core/behavior-file-tree.js',
   ),
   'javelin-behavior-phabricator-gesture' =>
   array(
     'uri' => '/res/16e1e77c/rsrc/js/core/behavior-gesture.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-behavior-device',
       2 => 'javelin-stratcom',
       3 => 'javelin-vector',
       4 => 'javelin-dom',
       5 => 'javelin-magical-init',
     ),
     'disk' => '/rsrc/js/core/behavior-gesture.js',
   ),
   'javelin-behavior-phabricator-gesture-example' =>
   array(
     'uri' => '/res/91d1e7f2/rsrc/js/application/uiexample/gesture-example.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-stratcom',
       1 => 'javelin-behavior',
       2 => 'javelin-vector',
       3 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/gesture-example.js',
   ),
   'javelin-behavior-phabricator-hovercards' =>
   array(
     'uri' => '/res/4fe6b436/rsrc/js/core/behavior-hovercard.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-behavior-device',
       2 => 'javelin-stratcom',
       3 => 'javelin-vector',
       4 => 'phabricator-hovercard',
     ),
     'disk' => '/rsrc/js/core/behavior-hovercard.js',
   ),
   'javelin-behavior-phabricator-keyboard-pager' =>
   array(
     'uri' => '/res/6a5445b8/rsrc/js/core/behavior-keyboard-pager.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-uri',
       2 => 'phabricator-keyboard-shortcut',
     ),
     'disk' => '/rsrc/js/core/behavior-keyboard-pager.js',
   ),
   'javelin-behavior-phabricator-keyboard-shortcuts' =>
   array(
     'uri' => '/res/b971e713/rsrc/js/core/behavior-keyboard-shortcuts.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-workflow',
       2 => 'javelin-json',
       3 => 'javelin-dom',
       4 => 'phabricator-keyboard-shortcut',
     ),
     'disk' => '/rsrc/js/core/behavior-keyboard-shortcuts.js',
   ),
   'javelin-behavior-phabricator-line-linker' =>
   array(
     'uri' => '/res/1cefdb6a/rsrc/js/core/behavior-line-linker.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-history',
     ),
     'disk' => '/rsrc/js/core/behavior-line-linker.js',
   ),
   'javelin-behavior-phabricator-nav' =>
   array(
     'uri' => '/res/afabcf16/rsrc/js/core/behavior-phabricator-nav.js',
     'type' => 'js',
     'requires' =>
     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',
     ),
     'disk' => '/rsrc/js/core/behavior-phabricator-nav.js',
   ),
   'javelin-behavior-phabricator-notification-example' =>
   array(
     'uri' => '/res/7c50cefd/rsrc/js/application/uiexample/notification-example.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'phabricator-notification',
       1 => 'javelin-stratcom',
       2 => 'javelin-behavior',
     ),
     'disk' => '/rsrc/js/application/uiexample/notification-example.js',
   ),
   'javelin-behavior-phabricator-object-selector' =>
   array(
     'uri' => '/res/461f95f7/rsrc/js/core/behavior-object-selector.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-request',
       3 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/core/behavior-object-selector.js',
   ),
   'javelin-behavior-phabricator-oncopy' =>
   array(
     'uri' => '/res/cd3a9345/rsrc/js/core/behavior-oncopy.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-oncopy.js',
   ),
   'javelin-behavior-phabricator-remarkup-assist' =>
   array(
     'uri' => '/res/6d254602/rsrc/js/core/behavior-phabricator-remarkup-assist.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'phabricator-textareautils',
       4 => 'javelin-workflow',
       5 => 'phabricator-notification',
       6 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/core/behavior-phabricator-remarkup-assist.js',
   ),
   'javelin-behavior-phabricator-reveal-content' =>
   array(
     'uri' => '/res/fef525ef/rsrc/js/core/behavior-reveal-content.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-reveal-content.js',
   ),
   'javelin-behavior-phabricator-search-typeahead' =>
   array(
     'uri' => '/res/409d9567/rsrc/js/core/behavior-search-typeahead.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-typeahead-ondemand-source',
       2 => 'javelin-typeahead',
       3 => 'javelin-dom',
       4 => 'javelin-uri',
       5 => 'javelin-util',
       6 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/core/behavior-search-typeahead.js',
   ),
   'javelin-behavior-phabricator-tooltips' =>
   array(
     'uri' => '/res/a0ac5320/rsrc/js/core/behavior-tooltip.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-behavior-device',
       2 => 'javelin-stratcom',
       3 => 'phabricator-tooltip',
     ),
     'disk' => '/rsrc/js/core/behavior-tooltip.js',
   ),
   'javelin-behavior-phabricator-transaction-comment-form' =>
   array(
     'uri' => '/res/3c8d3c10/rsrc/js/application/transactions/behavior-transaction-comment-form.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-fx',
       4 => 'javelin-request',
       5 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/transactions/behavior-transaction-comment-form.js',
   ),
   'javelin-behavior-phabricator-transaction-list' =>
   array(
-    'uri' => '/res/db441ac4/rsrc/js/application/transactions/behavior-transaction-list.js',
+    'uri' => '/res/f05b3c6b/rsrc/js/application/transactions/behavior-transaction-list.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-workflow',
       3 => 'javelin-dom',
       4 => 'javelin-fx',
     ),
     'disk' => '/rsrc/js/application/transactions/behavior-transaction-list.js',
   ),
   'javelin-behavior-phabricator-watch-anchor' =>
   array(
     'uri' => '/res/69a90817/rsrc/js/core/behavior-watch-anchor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/core/behavior-watch-anchor.js',
   ),
   'javelin-behavior-phame-post-preview' =>
   array(
     'uri' => '/res/181d1cbe/rsrc/js/application/phame/phame-post-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/phame/phame-post-preview.js',
   ),
   'javelin-behavior-pholio-mock-edit' =>
   array(
     'uri' => '/res/1fd14497/rsrc/js/application/pholio/behavior-pholio-mock-edit.js',
     'type' => 'js',
     'requires' =>
     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',
     ),
     'disk' => '/rsrc/js/application/pholio/behavior-pholio-mock-edit.js',
   ),
   'javelin-behavior-pholio-mock-view' =>
   array(
     'uri' => '/res/f9588dcf/rsrc/js/application/pholio/behavior-pholio-mock-view.js',
     'type' => 'js',
     'requires' =>
     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',
     ),
     'disk' => '/rsrc/js/application/pholio/behavior-pholio-mock-view.js',
   ),
   'javelin-behavior-ponder-votebox' =>
   array(
     'uri' => '/res/c28daa12/rsrc/js/application/ponder/behavior-votebox.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-stratcom',
       4 => 'javelin-request',
     ),
     'disk' => '/rsrc/js/application/ponder/behavior-votebox.js',
   ),
   'javelin-behavior-project-create' =>
   array(
     'uri' => '/res/e91f3f8f/rsrc/js/application/projects/behavior-project-create.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-workflow',
     ),
     'disk' => '/rsrc/js/application/projects/behavior-project-create.js',
   ),
   'javelin-behavior-refresh-csrf' =>
   array(
     'uri' => '/res/6c54100f/rsrc/js/core/behavior-refresh-csrf.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-request',
       1 => 'javelin-behavior',
       2 => 'javelin-dom',
       3 => 'phabricator-busy',
     ),
     'disk' => '/rsrc/js/core/behavior-refresh-csrf.js',
   ),
   'javelin-behavior-releeph-preview-branch' =>
   array(
     'uri' => '/res/f694854d/rsrc/js/application/releeph/releeph-preview-branch.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-uri',
       3 => 'javelin-request',
     ),
     'disk' => '/rsrc/js/application/releeph/releeph-preview-branch.js',
   ),
   'javelin-behavior-releeph-request-state-change' =>
   array(
     'uri' => '/res/07ecde0c/rsrc/js/application/releeph/releeph-request-state-change.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-request',
       4 => 'phabricator-keyboard-shortcut',
       5 => 'phabricator-notification',
     ),
     'disk' => '/rsrc/js/application/releeph/releeph-request-state-change.js',
   ),
   'javelin-behavior-releeph-request-typeahead' =>
   array(
     'uri' => '/res/2c2350a0/rsrc/js/application/releeph/releeph-request-typeahead.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-typeahead',
       3 => 'javelin-typeahead-ondemand-source',
       4 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/releeph/releeph-request-typeahead.js',
   ),
   'javelin-behavior-remarkup-preview' =>
   array(
     'uri' => '/res/6ec98508/rsrc/js/core/behavior-remarkup-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/core/behavior-remarkup-preview.js',
   ),
   'javelin-behavior-repository-crossreference' =>
   array(
     'uri' => '/res/d3f9d50b/rsrc/js/application/repository/repository-crossreference.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-uri',
     ),
     'disk' => '/rsrc/js/application/repository/repository-crossreference.js',
   ),
   'javelin-behavior-search-reorder-queries' =>
   array(
     'uri' => '/res/9864b481/rsrc/js/application/search/behavior-reorder-queries.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-workflow',
       3 => 'javelin-dom',
       4 => 'phabricator-draggable-list',
     ),
     'disk' => '/rsrc/js/application/search/behavior-reorder-queries.js',
   ),
   'javelin-behavior-slowvote-embed' =>
   array(
     'uri' => '/res/8e85e20d/rsrc/js/application/slowvote/behavior-slowvote-embed.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-request',
       2 => 'javelin-stratcom',
       3 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/slowvote/behavior-slowvote-embed.js',
   ),
   'javelin-behavior-stripe-payment-form' =>
   array(
     'uri' => '/res/c1a12d77/rsrc/js/application/phortune/behavior-stripe-payment-form.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phortune-credit-card-form',
     ),
     'disk' => '/rsrc/js/application/phortune/behavior-stripe-payment-form.js',
   ),
   'javelin-behavior-test-payment-form' =>
   array(
     'uri' => '/res/a8fe8616/rsrc/js/application/phortune/behavior-test-payment-form.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phortune-credit-card-form',
     ),
     'disk' => '/rsrc/js/application/phortune/behavior-test-payment-form.js',
   ),
   'javelin-behavior-toggle-class' =>
   array(
     'uri' => '/res/79921b7f/rsrc/js/core/behavior-toggle-class.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-toggle-class.js',
   ),
   'javelin-behavior-view-placeholder' =>
   array(
     'uri' => '/res/6abdb85b/rsrc/externals/javelin/ext/view/ViewPlaceholder.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-view-renderer',
       3 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/ext/view/ViewPlaceholder.js',
   ),
   'javelin-behavior-workflow' =>
   array(
     'uri' => '/res/4a0595c1/rsrc/js/core/behavior-workflow.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-workflow',
       3 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-workflow.js',
   ),
   'javelin-color' =>
   array(
     'uri' => '/res/f17034de/rsrc/externals/javelin/ext/fx/Color.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/ext/fx/Color.js',
   ),
   'javelin-cookie' =>
   array(
     'uri' => '/res/ee0d399f/rsrc/externals/javelin/lib/Cookie.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/lib/Cookie.js',
   ),
   'javelin-dom' =>
   array(
     'uri' => '/res/175211d6/rsrc/externals/javelin/lib/DOM.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-magical-init',
       1 => 'javelin-install',
       2 => 'javelin-util',
       3 => 'javelin-vector',
       4 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/externals/javelin/lib/DOM.js',
   ),
   'javelin-dynval' =>
   array(
     'uri' => '/res/ea6f2a9d/rsrc/externals/javelin/ext/reactor/core/DynVal.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-reactornode',
       2 => 'javelin-util',
       3 => 'javelin-reactor',
     ),
     'disk' => '/rsrc/externals/javelin/ext/reactor/core/DynVal.js',
   ),
   'javelin-event' =>
   array(
     'uri' => '/res/5f70f4d0/rsrc/externals/javelin/core/Event.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/core/Event.js',
   ),
   'javelin-fx' =>
   array(
     'uri' => '/res/23fb3d44/rsrc/externals/javelin/ext/fx/FX.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-color',
       1 => 'javelin-install',
       2 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/fx/FX.js',
   ),
   'javelin-history' =>
   array(
     'uri' => '/res/6c084b09/rsrc/externals/javelin/lib/History.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-stratcom',
       1 => 'javelin-install',
       2 => 'javelin-uri',
       3 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/lib/History.js',
   ),
   'javelin-install' =>
   array(
     'uri' => '/res/904356c0/rsrc/externals/javelin/core/install.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-util',
       1 => 'javelin-magical-init',
     ),
     'disk' => '/rsrc/externals/javelin/core/install.js',
   ),
   'javelin-json' =>
   array(
     'uri' => '/res/cf83e72c/rsrc/externals/javelin/lib/JSON.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/lib/JSON.js',
   ),
   'javelin-magical-init' =>
   array(
     'uri' => '/res/7c6c8d5a/rsrc/externals/javelin/core/init.js',
     'type' => 'js',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/externals/javelin/core/init.js',
   ),
   'javelin-mask' =>
   array(
     'uri' => '/res/465cf513/rsrc/externals/javelin/lib/Mask.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/externals/javelin/lib/Mask.js',
   ),
   'javelin-reactor' =>
   array(
     'uri' => '/res/c05f2658/rsrc/externals/javelin/ext/reactor/core/Reactor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/reactor/core/Reactor.js',
   ),
   'javelin-reactor-dom' =>
   array(
     'uri' => '/res/5e03117e/rsrc/externals/javelin/ext/reactor/dom/RDOM.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-dom',
       1 => 'javelin-dynval',
       2 => 'javelin-reactor',
       3 => 'javelin-reactornode',
       4 => 'javelin-install',
       5 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/reactor/dom/RDOM.js',
   ),
   'javelin-reactor-node-calmer' =>
   array(
     'uri' => '/res/a93dd6b6/rsrc/externals/javelin/ext/reactor/core/ReactorNodeCalmer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-reactor',
       2 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/reactor/core/ReactorNodeCalmer.js',
   ),
   'javelin-reactornode' =>
   array(
     'uri' => '/res/4eac475b/rsrc/externals/javelin/ext/reactor/core/ReactorNode.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-reactor',
       2 => 'javelin-util',
       3 => 'javelin-reactor-node-calmer',
     ),
     'disk' => '/rsrc/externals/javelin/ext/reactor/core/ReactorNode.js',
   ),
   'javelin-request' =>
   array(
     'uri' => '/res/687bdcfc/rsrc/externals/javelin/lib/Request.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-stratcom',
       2 => 'javelin-util',
       3 => 'javelin-behavior',
       4 => 'javelin-json',
       5 => 'javelin-dom',
       6 => 'javelin-resource',
     ),
     'disk' => '/rsrc/externals/javelin/lib/Request.js',
   ),
   'javelin-resource' =>
   array(
     'uri' => '/res/33a3bb57/rsrc/externals/javelin/lib/Resource.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-util',
       1 => 'javelin-uri',
       2 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/lib/Resource.js',
   ),
   'javelin-stratcom' =>
   array(
     'uri' => '/res/714946e7/rsrc/externals/javelin/core/Stratcom.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-event',
       2 => 'javelin-util',
       3 => 'javelin-magical-init',
     ),
     'disk' => '/rsrc/externals/javelin/core/Stratcom.js',
   ),
   'javelin-tokenizer' =>
   array(
     'uri' => '/res/7c117141/rsrc/externals/javelin/lib/control/tokenizer/Tokenizer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-dom',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
       3 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/tokenizer/Tokenizer.js',
   ),
   'javelin-typeahead' =>
   array(
     'uri' => '/res/fd79f758/rsrc/externals/javelin/lib/control/typeahead/Typeahead.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-vector',
       3 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/Typeahead.js',
   ),
   'javelin-typeahead-composite-source' =>
   array(
     'uri' => '/res/487b3da2/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadCompositeSource.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-typeahead-source',
       2 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadCompositeSource.js',
   ),
   'javelin-typeahead-normalizer' =>
   array(
     'uri' => '/res/5a4bd979/rsrc/externals/javelin/lib/control/typeahead/normalizer/TypeaheadNormalizer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/normalizer/TypeaheadNormalizer.js',
   ),
   'javelin-typeahead-ondemand-source' =>
   array(
     'uri' => '/res/92286a21/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadOnDemandSource.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-request',
       3 => 'javelin-typeahead-source',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadOnDemandSource.js',
   ),
   'javelin-typeahead-preloaded-source' =>
   array(
     'uri' => '/res/147900c7/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadPreloadedSource.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-request',
       3 => 'javelin-typeahead-source',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadPreloadedSource.js',
   ),
   'javelin-typeahead-source' =>
   array(
     'uri' => '/res/13289259/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadSource.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-typeahead-normalizer',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadSource.js',
   ),
   'javelin-typeahead-static-source' =>
   array(
     'uri' => '/res/bb0a5173/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadStaticSource.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-typeahead-source',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadStaticSource.js',
   ),
   'javelin-uri' =>
   array(
     'uri' => '/res/75aa4597/rsrc/externals/javelin/lib/URI.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/externals/javelin/lib/URI.js',
   ),
   'javelin-util' =>
   array(
     'uri' => '/res/90222113/rsrc/externals/javelin/core/util.js',
     'type' => 'js',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/externals/javelin/core/util.js',
   ),
   'javelin-vector' =>
   array(
     'uri' => '/res/58ea3dd7/rsrc/externals/javelin/lib/Vector.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-event',
     ),
     'disk' => '/rsrc/externals/javelin/lib/Vector.js',
   ),
   'javelin-view' =>
   array(
     'uri' => '/res/38daaec0/rsrc/externals/javelin/ext/view/View.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/view/View.js',
   ),
   'javelin-view-html' =>
   array(
     'uri' => '/res/0d225e8c/rsrc/externals/javelin/ext/view/HTMLView.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-view-visitor',
       3 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/view/HTMLView.js',
   ),
   'javelin-view-interpreter' =>
   array(
     'uri' => '/res/b0c07f96/rsrc/externals/javelin/ext/view/ViewInterpreter.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-view',
       1 => 'javelin-install',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/externals/javelin/ext/view/ViewInterpreter.js',
   ),
   'javelin-view-renderer' =>
   array(
     'uri' => '/res/fe0d2f60/rsrc/externals/javelin/ext/view/ViewRenderer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/view/ViewRenderer.js',
   ),
   'javelin-view-visitor' =>
   array(
     'uri' => '/res/b1606cec/rsrc/externals/javelin/ext/view/ViewVisitor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/view/ViewVisitor.js',
   ),
   'javelin-workflow' =>
   array(
     'uri' => '/res/7626494b/rsrc/externals/javelin/lib/Workflow.js',
     'type' => 'js',
     'requires' =>
     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',
     ),
     'disk' => '/rsrc/externals/javelin/lib/Workflow.js',
   ),
   'legalpad-documentbody-css' =>
   array(
     'uri' => '/res/034c3494/rsrc/css/application/legalpad/legalpad-documentbody.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/legalpad/legalpad-documentbody.css',
   ),
   'lightbox-attachment-css' =>
   array(
     'uri' => '/res/4657e15d/rsrc/css/aphront/lightbox-attachment.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/lightbox-attachment.css',
   ),
   'maniphest-batch-editor' =>
   array(
     'uri' => '/res/fb15d744/rsrc/css/application/maniphest/batch-editor.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/maniphest/batch-editor.css',
   ),
   'maniphest-report-css' =>
   array(
     'uri' => '/res/2e633fcf/rsrc/css/application/maniphest/report.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/maniphest/report.css',
   ),
   'maniphest-task-edit-css' =>
   array(
     'uri' => '/res/c0c64a27/rsrc/css/application/maniphest/task-edit.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/maniphest/task-edit.css',
   ),
   'maniphest-task-summary-css' =>
   array(
     'uri' => '/res/1f2fac54/rsrc/css/application/maniphest/task-summary.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/maniphest/task-summary.css',
   ),
   'maniphest-transaction-detail-css' =>
   array(
     'uri' => '/res/30242771/rsrc/css/application/maniphest/transaction-detail.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/maniphest/transaction-detail.css',
   ),
   'multirow-row-manager' =>
   array(
     'uri' => '/res/408fae4f/rsrc/js/core/MultirowRowManager.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/core/MultirowRowManager.js',
   ),
   'owners-path-editor' =>
   array(
     'uri' => '/res/29b68354/rsrc/js/application/owners/OwnersPathEditor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'multirow-row-manager',
       1 => 'javelin-install',
       2 => 'path-typeahead',
       3 => 'javelin-dom',
       4 => 'javelin-util',
       5 => 'phabricator-prefab',
     ),
     'disk' => '/rsrc/js/application/owners/OwnersPathEditor.js',
   ),
   'owners-path-editor-css' =>
   array(
     'uri' => '/res/1b9b5456/rsrc/css/application/owners/owners-path-editor.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/owners/owners-path-editor.css',
   ),
   'paste-css' =>
   array(
     'uri' => '/res/216fbfe9/rsrc/css/application/paste/paste.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/paste/paste.css',
   ),
   'path-typeahead' =>
   array(
     'uri' => '/res/50246fb6/rsrc/js/application/herald/PathTypeahead.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-typeahead',
       2 => 'javelin-dom',
       3 => 'javelin-request',
       4 => 'javelin-typeahead-ondemand-source',
       5 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/application/herald/PathTypeahead.js',
   ),
   'people-profile-css' =>
   array(
     'uri' => '/res/d50d9502/rsrc/css/application/people/people-profile.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/people/people-profile.css',
   ),
   'phabricator-action-header-view-css' =>
   array(
     'uri' => '/res/3b701648/rsrc/css/layout/phabricator-action-header-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-action-header-view.css',
   ),
   'phabricator-action-list-view-css' =>
   array(
     'uri' => '/res/c31a8b76/rsrc/css/layout/phabricator-action-list-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-action-list-view.css',
   ),
   'phabricator-application-launch-view-css' =>
   array(
     'uri' => '/res/21a67228/rsrc/css/application/base/phabricator-application-launch-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/base/phabricator-application-launch-view.css',
   ),
   'phabricator-busy' =>
   array(
     'uri' => '/res/083c11d2/rsrc/js/core/Busy.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-fx',
     ),
     'disk' => '/rsrc/js/core/Busy.js',
   ),
   'phabricator-chatlog-css' =>
   array(
     'uri' => '/res/5542e247/rsrc/css/application/chatlog/chatlog.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/chatlog/chatlog.css',
   ),
   'phabricator-content-source-view-css' =>
   array(
     'uri' => '/res/8c738a93/rsrc/css/application/contentsource/content-source-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/contentsource/content-source-view.css',
   ),
   'phabricator-core-css' =>
   array(
-    'uri' => '/res/bb4b77f3/rsrc/css/core/core.css',
+    'uri' => '/res/9e767fb1/rsrc/css/core/core.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/core/core.css',
   ),
   'phabricator-countdown-css' =>
   array(
     'uri' => '/res/c4a30296/rsrc/css/application/countdown/timer.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/countdown/timer.css',
   ),
   'phabricator-crumbs-view-css' =>
   array(
     'uri' => '/res/feeb02f0/rsrc/css/layout/phabricator-crumbs-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-crumbs-view.css',
   ),
   'phabricator-drag-and-drop-file-upload' =>
   array(
     'uri' => '/res/396d3b3b/rsrc/js/core/DragAndDropFileUpload.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-request',
       3 => 'javelin-dom',
       4 => 'javelin-uri',
       5 => 'phabricator-file-upload',
     ),
     'disk' => '/rsrc/js/core/DragAndDropFileUpload.js',
   ),
   'phabricator-draggable-list' =>
   array(
     'uri' => '/res/7292a1c4/rsrc/js/core/DraggableList.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-util',
       4 => 'javelin-vector',
       5 => 'javelin-magical-init',
     ),
     'disk' => '/rsrc/js/core/DraggableList.js',
   ),
   'phabricator-dropdown-menu' =>
   array(
     'uri' => '/res/a248b7f4/rsrc/js/core/DropdownMenu.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
       4 => 'javelin-stratcom',
       5 => 'phabricator-menu-item',
     ),
     'disk' => '/rsrc/js/core/DropdownMenu.js',
   ),
   'phabricator-fatal-config-template-css' =>
   array(
     'uri' => '/res/6e1a8d22/rsrc/css/application/config/config-template.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/config/config-template.css',
   ),
   'phabricator-feed-css' =>
   array(
     'uri' => '/res/e19633ed/rsrc/css/application/feed/feed.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/feed/feed.css',
   ),
   'phabricator-file-upload' =>
   array(
     'uri' => '/res/c9605008/rsrc/js/core/FileUpload.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'phabricator-notification',
     ),
     'disk' => '/rsrc/js/core/FileUpload.js',
   ),
   'phabricator-filetree-view-css' =>
   array(
     'uri' => '/res/c912ed91/rsrc/css/layout/phabricator-filetree-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-filetree-view.css',
   ),
   'phabricator-flag-css' =>
   array(
     'uri' => '/res/7c3dd9ea/rsrc/css/application/flag/flag.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/flag/flag.css',
   ),
-  'phabricator-form-view-css' =>
-  array(
-    'uri' => '/res/ba05f8ba/rsrc/css/layout/phabricator-form-view.css',
-    'type' => 'css',
-    'requires' =>
-    array(
-    ),
-    'disk' => '/rsrc/css/layout/phabricator-form-view.css',
-  ),
   'phabricator-header-view-css' =>
   array(
     'uri' => '/res/da35cfa0/rsrc/css/layout/phabricator-header-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-header-view.css',
   ),
   'phabricator-hovercard' =>
   array(
     'uri' => '/res/7fb94260/rsrc/js/core/Hovercard.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-vector',
       3 => 'javelin-request',
       4 => 'javelin-uri',
     ),
     'disk' => '/rsrc/js/core/Hovercard.js',
   ),
   'phabricator-hovercard-view-css' =>
   array(
     'uri' => '/res/80683f88/rsrc/css/layout/phabricator-hovercard-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-hovercard-view.css',
   ),
   'phabricator-jump-nav' =>
   array(
     'uri' => '/res/15a5598e/rsrc/css/application/directory/phabricator-jump-nav.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/directory/phabricator-jump-nav.css',
   ),
   'phabricator-keyboard-shortcut' =>
   array(
     'uri' => '/res/44747afd/rsrc/js/core/KeyboardShortcut.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'phabricator-keyboard-shortcut-manager',
     ),
     'disk' => '/rsrc/js/core/KeyboardShortcut.js',
   ),
   'phabricator-keyboard-shortcut-manager' =>
   array(
     'uri' => '/res/bf9bc02a/rsrc/js/core/KeyboardShortcutManager.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
       3 => 'javelin-dom',
       4 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/core/KeyboardShortcutManager.js',
   ),
   'phabricator-main-menu-view' =>
   array(
     'uri' => '/res/69b4e76a/rsrc/css/application/base/main-menu-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/base/main-menu-view.css',
   ),
   'phabricator-menu-item' =>
   array(
     'uri' => '/res/2add4594/rsrc/js/core/DropdownMenuItem.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/DropdownMenuItem.js',
   ),
   'phabricator-nav-view-css' =>
   array(
     'uri' => '/res/37955b6a/rsrc/css/aphront/phabricator-nav-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/phabricator-nav-view.css',
   ),
   'phabricator-notification' =>
   array(
     'uri' => '/res/0764da14/rsrc/js/core/Notification.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-util',
       4 => 'phabricator-notification-css',
     ),
     'disk' => '/rsrc/js/core/Notification.js',
   ),
   'phabricator-notification-css' =>
   array(
     'uri' => '/res/bbc495b9/rsrc/css/aphront/notification.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/notification.css',
   ),
   'phabricator-notification-menu-css' =>
   array(
     'uri' => '/res/b14af69e/rsrc/css/application/base/notification-menu.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/base/notification-menu.css',
   ),
   'phabricator-object-item-list-view-css' =>
   array(
     'uri' => '/res/a3e45d8a/rsrc/css/layout/phabricator-object-item-list-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-object-item-list-view.css',
   ),
   'phabricator-object-list-view-css' =>
   array(
     'uri' => '/res/4f183668/rsrc/css/application/projects/phabricator-object-list-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/projects/phabricator-object-list-view.css',
   ),
   'phabricator-object-selector-css' =>
   array(
     'uri' => '/res/502f1bb9/rsrc/css/application/objectselector/object-selector.css',
     'type' => 'css',
     'requires' =>
     array(
       0 => 'aphront-dialog-view-css',
     ),
     'disk' => '/rsrc/css/application/objectselector/object-selector.css',
   ),
   'phabricator-phtize' =>
   array(
     'uri' => '/res/dc655a81/rsrc/js/core/phtize.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/core/phtize.js',
   ),
   'phabricator-prefab' =>
   array(
     'uri' => '/res/511859ca/rsrc/js/core/Prefab.js',
     'type' => 'js',
     'requires' =>
     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',
     ),
     'disk' => '/rsrc/js/core/Prefab.js',
   ),
   'phabricator-profile-css' =>
   array(
     'uri' => '/res/87229261/rsrc/css/application/profile/profile-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/profile/profile-view.css',
   ),
   'phabricator-project-tag-css' =>
   array(
     'uri' => '/res/383b8c30/rsrc/css/application/projects/project-tag.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/projects/project-tag.css',
   ),
   'phabricator-property-list-view-css' =>
   array(
     'uri' => '/res/1b2f0fa9/rsrc/css/layout/phabricator-property-list-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-property-list-view.css',
   ),
   'phabricator-remarkup-css' =>
   array(
-    'uri' => '/res/8531b6a1/rsrc/css/core/remarkup.css',
+    'uri' => '/res/d0af3cab/rsrc/css/core/remarkup.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/core/remarkup.css',
   ),
   'phabricator-search-results-css' =>
   array(
     'uri' => '/res/9b749d7d/rsrc/css/application/search/search-results.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/search/search-results.css',
   ),
   'phabricator-settings-css' =>
   array(
     'uri' => '/res/fb9d017f/rsrc/css/application/settings/settings.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/settings/settings.css',
   ),
   'phabricator-shaped-request' =>
   array(
     'uri' => '/res/d173af85/rsrc/js/core/ShapedRequest.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-request',
     ),
     'disk' => '/rsrc/js/core/ShapedRequest.js',
   ),
   'phabricator-side-menu-view-css' =>
   array(
-    'uri' => '/res/f43a8365/rsrc/css/layout/phabricator-side-menu-view.css',
+    'uri' => '/res/e83fbe58/rsrc/css/layout/phabricator-side-menu-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-side-menu-view.css',
   ),
   'phabricator-slowvote-css' =>
   array(
     'uri' => '/res/11373549/rsrc/css/application/slowvote/slowvote.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/slowvote/slowvote.css',
   ),
   'phabricator-source-code-view-css' =>
   array(
     'uri' => '/res/70bcbea4/rsrc/css/layout/phabricator-source-code-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-source-code-view.css',
   ),
   'phabricator-standard-page-view' =>
   array(
     'uri' => '/res/dabd95bf/rsrc/css/application/base/standard-page-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/base/standard-page-view.css',
   ),
   'phabricator-tag-view-css' =>
   array(
     'uri' => '/res/21a0a5d6/rsrc/css/layout/phabricator-tag-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-tag-view.css',
   ),
   'phabricator-textareautils' =>
   array(
     'uri' => '/res/03c03e8b/rsrc/js/core/TextAreaUtils.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
     ),
     'disk' => '/rsrc/js/core/TextAreaUtils.js',
   ),
   'phabricator-timeline-view-css' =>
   array(
     'uri' => '/res/3b85450f/rsrc/css/layout/phabricator-timeline-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-timeline-view.css',
   ),
   'phabricator-tooltip' =>
   array(
     'uri' => '/res/a23bc887/rsrc/js/core/ToolTip.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/core/ToolTip.js',
   ),
   'phabricator-transaction-view-css' =>
   array(
     'uri' => '/res/00be4b1a/rsrc/css/aphront/transaction.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/transaction.css',
   ),
   'phabricator-ui-example-css' =>
   array(
     'uri' => '/res/376ab671/rsrc/css/application/uiexample/example.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/uiexample/example.css',
   ),
   'phabricator-uiexample-javelin-view' =>
   array(
     'uri' => '/res/d42834b6/rsrc/js/application/uiexample/JavelinViewExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-view',
     ),
     'disk' => '/rsrc/js/application/uiexample/JavelinViewExample.js',
   ),
   'phabricator-uiexample-reactor-button' =>
   array(
     'uri' => '/res/6bfe4f05/rsrc/js/application/uiexample/ReactorButtonExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-dynval',
       4 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorButtonExample.js',
   ),
   'phabricator-uiexample-reactor-checkbox' =>
   array(
     'uri' => '/res/3e8b30ac/rsrc/js/application/uiexample/ReactorCheckboxExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorCheckboxExample.js',
   ),
   'phabricator-uiexample-reactor-focus' =>
   array(
     'uri' => '/res/d8f3b56e/rsrc/js/application/uiexample/ReactorFocusExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorFocusExample.js',
   ),
   'phabricator-uiexample-reactor-input' =>
   array(
     'uri' => '/res/936352d9/rsrc/js/application/uiexample/ReactorInputExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-reactor-dom',
       2 => 'javelin-view-html',
       3 => 'javelin-view-interpreter',
       4 => 'javelin-view-renderer',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorInputExample.js',
   ),
   'phabricator-uiexample-reactor-mouseover' =>
   array(
     'uri' => '/res/031a9f4f/rsrc/js/application/uiexample/ReactorMouseoverExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorMouseoverExample.js',
   ),
   'phabricator-uiexample-reactor-radio' =>
   array(
     'uri' => '/res/208c58e3/rsrc/js/application/uiexample/ReactorRadioExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorRadioExample.js',
   ),
   'phabricator-uiexample-reactor-select' =>
   array(
     'uri' => '/res/1b68a6db/rsrc/js/application/uiexample/ReactorSelectExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorSelectExample.js',
   ),
   'phabricator-uiexample-reactor-sendclass' =>
   array(
     'uri' => '/res/00cb3131/rsrc/js/application/uiexample/ReactorSendClassExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorSendClassExample.js',
   ),
   'phabricator-uiexample-reactor-sendproperties' =>
   array(
     'uri' => '/res/392f1e02/rsrc/js/application/uiexample/ReactorSendPropertiesExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorSendPropertiesExample.js',
   ),
   'phabricator-workboard-view-css' =>
   array(
     'uri' => '/res/f598d215/rsrc/css/layout/phabricator-workboard-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-workboard-view.css',
   ),
   'phabricator-workpanel-view-css' =>
   array(
     'uri' => '/res/d0cdb62e/rsrc/css/layout/phabricator-workpanel-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-workpanel-view.css',
   ),
   'phabricator-zindex-css' =>
   array(
     'uri' => '/res/a50437bf/rsrc/css/core/z-index.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/core/z-index.css',
   ),
   'phame-css' =>
   array(
     'uri' => '/res/ba5a8cd8/rsrc/css/application/phame/phame.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/phame/phame.css',
   ),
   'pholio-css' =>
   array(
     'uri' => '/res/14b14ff5/rsrc/css/application/pholio/pholio.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/pholio/pholio.css',
   ),
   'pholio-edit-css' =>
   array(
     'uri' => '/res/63f3332d/rsrc/css/application/pholio/pholio-edit.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/pholio/pholio-edit.css',
   ),
   'pholio-inline-comments-css' =>
   array(
     'uri' => '/res/006fc575/rsrc/css/application/pholio/pholio-inline-comments.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/pholio/pholio-inline-comments.css',
   ),
   'phortune-credit-card-form' =>
   array(
     'uri' => '/res/bc948778/rsrc/js/application/phortune/phortune-credit-card-form.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-json',
       3 => 'javelin-workflow',
       4 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/application/phortune/phortune-credit-card-form.js',
   ),
   'phortune-credit-card-form-css' =>
   array(
     'uri' => '/res/563c8c6d/rsrc/css/application/phortune/phortune-credit-card-form.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/phortune/phortune-credit-card-form.css',
   ),
   'phrequent-css' =>
   array(
     'uri' => '/res/9d6f3eb7/rsrc/css/application/phrequent/phrequent.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/phrequent/phrequent.css',
   ),
   'phriction-document-css' =>
   array(
     'uri' => '/res/754f6b37/rsrc/css/application/phriction/phriction-document-css.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/phriction/phriction-document-css.css',
   ),
   'phui-box-css' =>
   array(
-    'uri' => '/res/1b741073/rsrc/css/phui/phui-box.css',
+    'uri' => '/res/8244305c/rsrc/css/phui/phui-box.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-box.css',
   ),
   'phui-button-css' =>
   array(
     'uri' => '/res/aeb3d0f2/rsrc/css/phui/phui-button.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-button.css',
   ),
   'phui-document-view-css' =>
   array(
     'uri' => '/res/fe374dee/rsrc/css/phui/phui-document.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-document.css',
   ),
   'phui-feed-story-css' =>
   array(
     'uri' => '/res/68a0ce41/rsrc/css/phui/phui-feed-story.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-feed-story.css',
   ),
   'phui-form-css' =>
   array(
-    'uri' => '/res/c02b6db7/rsrc/css/phui/phui-form.css',
+    'uri' => '/res/8f33e95f/rsrc/css/phui/phui-form.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-form.css',
   ),
+  'phui-form-view-css' =>
+  array(
+    'uri' => '/res/52025834/rsrc/css/phui/phui-form-view.css',
+    'type' => 'css',
+    'requires' =>
+    array(
+    ),
+    'disk' => '/rsrc/css/phui/phui-form-view.css',
+  ),
   'phui-icon-view-css' =>
   array(
     'uri' => '/res/f78f4c64/rsrc/css/phui/phui-icon.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-icon.css',
   ),
   'phui-list-view-css' =>
   array(
     'uri' => '/res/3235e888/rsrc/css/phui/phui-list.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-list.css',
   ),
   'phui-pinboard-view-css' =>
   array(
     'uri' => '/res/3b961aa1/rsrc/css/phui/phui-pinboard-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-pinboard-view.css',
   ),
   'phui-remarkup-preview-css' =>
   array(
-    'uri' => '/res/4535e062/rsrc/css/phui/phui-remarkup-preview.css',
+    'uri' => '/res/3cba9fbc/rsrc/css/phui/phui-remarkup-preview.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-remarkup-preview.css',
   ),
   'phui-spacing-css' =>
   array(
     'uri' => '/res/28891fd3/rsrc/css/phui/phui-spacing.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-spacing.css',
   ),
   'phui-status-list-view-css' =>
   array(
     'uri' => '/res/edd24959/rsrc/css/phui/phui-status.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-status.css',
   ),
   'phui-text-css' =>
   array(
     'uri' => '/res/63e53cac/rsrc/css/phui/phui-text.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-text.css',
   ),
   'ponder-comment-table-css' =>
   array(
     'uri' => '/res/2527ba37/rsrc/css/application/ponder/comments.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/ponder/comments.css',
   ),
   'ponder-feed-view-css' =>
   array(
     'uri' => '/res/cab09075/rsrc/css/application/ponder/feed.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/ponder/feed.css',
   ),
   'ponder-post-css' =>
   array(
     'uri' => '/res/013b9e2c/rsrc/css/application/ponder/post.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/ponder/post.css',
   ),
   'ponder-vote-css' =>
   array(
     'uri' => '/res/6bbe8538/rsrc/css/application/ponder/vote.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/ponder/vote.css',
   ),
   'raphael-core' =>
   array(
     'uri' => '/res/5dc5e17c/rsrc/externals/raphael/raphael.js',
     'type' => 'js',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/externals/raphael/raphael.js',
   ),
   'raphael-g' =>
   array(
     'uri' => '/res/229b89a1/rsrc/externals/raphael/g.raphael.js',
     'type' => 'js',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/externals/raphael/g.raphael.js',
   ),
   'raphael-g-line' =>
   array(
     'uri' => '/res/96da30f7/rsrc/externals/raphael/g.raphael.line.js',
     'type' => 'js',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/externals/raphael/g.raphael.line.js',
   ),
   'releeph-branch' =>
   array(
     'uri' => '/res/6ad6420d/rsrc/css/application/releeph/releeph-branch.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-branch.css',
   ),
   'releeph-colors' =>
   array(
     'uri' => '/res/dff4b26a/rsrc/css/application/releeph/releeph-colors.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-colors.css',
   ),
   'releeph-core' =>
   array(
     'uri' => '/res/853f4a73/rsrc/css/application/releeph/releeph-core.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-core.css',
   ),
   'releeph-intents' =>
   array(
     'uri' => '/res/4e73e9dd/rsrc/css/application/releeph/releeph-intents.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-intents.css',
   ),
   'releeph-preview-branch' =>
   array(
     'uri' => '/res/65e5dece/rsrc/css/application/releeph/releeph-preview-branch.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-preview-branch.css',
   ),
   'releeph-project' =>
   array(
     'uri' => '/res/b9376e59/rsrc/css/application/releeph/releeph-project.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-project.css',
   ),
   'releeph-request-differential-create-dialog' =>
   array(
     'uri' => '/res/4df30ce1/rsrc/css/application/releeph/releeph-request-differential-create-dialog.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-request-differential-create-dialog.css',
   ),
   'releeph-request-typeahead-css' =>
   array(
     'uri' => '/res/9c9a1acf/rsrc/css/application/releeph/releeph-request-typeahead.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-request-typeahead.css',
   ),
   'releeph-status' =>
   array(
     'uri' => '/res/588529df/rsrc/css/application/releeph/releeph-status.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-status.css',
   ),
   'setup-issue-css' =>
   array(
     'uri' => '/res/efbb3673/rsrc/css/application/config/setup-issue.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/config/setup-issue.css',
   ),
   'sprite-actions-css' =>
   array(
     'uri' => '/res/bd43efa8/rsrc/css/sprite-actions.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-actions.css',
   ),
   'sprite-apps-css' =>
   array(
     'uri' => '/res/0805dd1d/rsrc/css/sprite-apps.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-apps.css',
   ),
   'sprite-apps-large-css' =>
   array(
     'uri' => '/res/ebba1243/rsrc/css/sprite-apps-large.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-apps-large.css',
   ),
   'sprite-apps-xlarge-css' =>
   array(
     'uri' => '/res/33a8e644/rsrc/css/sprite-apps-xlarge.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-apps-xlarge.css',
   ),
   'sprite-conpherence-css' =>
   array(
     'uri' => '/res/f6793453/rsrc/css/sprite-conpherence.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-conpherence.css',
   ),
   'sprite-docs-css' =>
   array(
     'uri' => '/res/b32f93bc/rsrc/css/sprite-docs.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-docs.css',
   ),
   'sprite-gradient-css' =>
   array(
-    'uri' => '/res/af8d50a1/rsrc/css/sprite-gradient.css',
+    'uri' => '/res/08c64fb3/rsrc/css/sprite-gradient.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-gradient.css',
   ),
   'sprite-icons-css' =>
   array(
     'uri' => '/res/03295fbd/rsrc/css/sprite-icons.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-icons.css',
   ),
   'sprite-login-css' =>
   array(
     'uri' => '/res/8bd33e35/rsrc/css/sprite-login.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-login.css',
   ),
   'sprite-menu-css' =>
   array(
     'uri' => '/res/764ab039/rsrc/css/sprite-menu.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-menu.css',
   ),
   'sprite-minicons-css' =>
   array(
     'uri' => '/res/2dba70cd/rsrc/css/sprite-minicons.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-minicons.css',
   ),
   'sprite-payments-css' =>
   array(
     'uri' => '/res/876697b6/rsrc/css/sprite-payments.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-payments.css',
   ),
   'sprite-status-css' =>
   array(
     'uri' => '/res/5c735469/rsrc/css/sprite-status.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-status.css',
   ),
   'sprite-tokens-css' =>
   array(
     'uri' => '/res/edb4e341/rsrc/css/sprite-tokens.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-tokens.css',
   ),
   'syntax-highlighting-css' =>
   array(
     'uri' => '/res/3c77ac95/rsrc/css/core/syntax.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/core/syntax.css',
   ),
   'tokens-css' =>
   array(
     'uri' => '/res/bbddf548/rsrc/css/application/tokens/tokens.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/tokens/tokens.css',
   ),
 ), array(
   'packages' =>
   array(
-    '4a060444' =>
+    '4c072d06' =>
     array(
       'name' => 'core.pkg.css',
       'symbols' =>
       array(
         0 => 'phabricator-core-css',
         1 => 'phabricator-zindex-css',
         2 => 'phui-button-css',
         3 => 'phabricator-standard-page-view',
         4 => 'aphront-dialog-view-css',
-        5 => 'aphront-form-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 => 'phabricator-main-menu-view',
         24 => 'phabricator-notification-css',
         25 => 'phabricator-notification-menu-css',
         26 => 'lightbox-attachment-css',
         27 => 'phabricator-header-view-css',
-        28 => 'phabricator-form-view-css',
-        29 => 'phabricator-filetree-view-css',
-        30 => 'phabricator-nav-view-css',
-        31 => 'phabricator-side-menu-view-css',
-        32 => 'phabricator-crumbs-view-css',
-        33 => 'phabricator-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 => 'phabricator-property-list-view-css',
-        41 => 'phabricator-tag-view-css',
+        28 => 'phabricator-filetree-view-css',
+        29 => 'phabricator-nav-view-css',
+        30 => 'phabricator-side-menu-view-css',
+        31 => 'phabricator-crumbs-view-css',
+        32 => 'phabricator-object-item-list-view-css',
+        33 => 'global-drag-and-drop-css',
+        34 => 'phui-spacing-css',
+        35 => 'phui-form-css',
+        36 => 'phui-icon-view-css',
+        37 => 'phabricator-application-launch-view-css',
+        38 => 'phabricator-action-list-view-css',
+        39 => 'phabricator-property-list-view-css',
+        40 => 'phabricator-tag-view-css',
       ),
-      'uri' => '/res/pkg/4a060444/core.pkg.css',
+      'uri' => '/res/pkg/4c072d06/core.pkg.css',
       'type' => 'css',
     ),
     '4f81c788' =>
     array(
       'name' => 'core.pkg.js',
       'symbols' =>
       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',
       ),
       'uri' => '/res/pkg/4f81c788/core.pkg.js',
       'type' => 'js',
     ),
     '4ccfeb47' =>
     array(
       'name' => 'darkconsole.pkg.js',
       'symbols' =>
       array(
         0 => 'javelin-behavior-dark-console',
         1 => 'javelin-behavior-error-log',
       ),
       'uri' => '/res/pkg/4ccfeb47/darkconsole.pkg.js',
       'type' => 'js',
     ),
     '09216861' =>
     array(
       'name' => 'differential.pkg.css',
       'symbols' =>
       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 => 'differential-revision-comment-list-css',
         9 => 'phabricator-object-selector-css',
         10 => 'phabricator-content-source-view-css',
         11 => 'differential-local-commits-view-css',
         12 => 'inline-comment-summary-css',
       ),
       'uri' => '/res/pkg/09216861/differential.pkg.css',
       'type' => 'css',
     ),
     'd07a3bc2' =>
     array(
       'name' => 'differential.pkg.js',
       'symbols' =>
       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-accept-with-errors',
         8 => 'javelin-behavior-differential-comment-jump',
         9 => 'javelin-behavior-differential-add-reviewers-and-ccs',
         10 => 'javelin-behavior-differential-keyboard-navigation',
         11 => 'javelin-behavior-aphront-drag-and-drop-textarea',
         12 => 'javelin-behavior-phabricator-object-selector',
         13 => 'javelin-behavior-repository-crossreference',
         14 => 'javelin-behavior-load-blame',
         15 => 'differential-inline-comment-editor',
         16 => 'javelin-behavior-differential-dropdown-menus',
         17 => 'javelin-behavior-differential-toggle-files',
         18 => 'javelin-behavior-differential-user-select',
       ),
       'uri' => '/res/pkg/d07a3bc2/differential.pkg.js',
       'type' => 'js',
     ),
     'c8ce2d88' =>
     array(
       'name' => 'diffusion.pkg.css',
       'symbols' =>
       array(
         0 => 'diffusion-commit-view-css',
         1 => 'diffusion-icons-css',
       ),
       'uri' => '/res/pkg/c8ce2d88/diffusion.pkg.css',
       'type' => 'css',
     ),
     96909266 =>
     array(
       'name' => 'diffusion.pkg.js',
       'symbols' =>
       array(
         0 => 'javelin-behavior-diffusion-pull-lastmodified',
         1 => 'javelin-behavior-diffusion-commit-graph',
         2 => 'javelin-behavior-audit-preview',
       ),
       'uri' => '/res/pkg/96909266/diffusion.pkg.js',
       'type' => 'js',
     ),
     '2dbbb7d1' =>
     array(
       'name' => 'javelin.pkg.js',
       'symbols' =>
       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',
       ),
       'uri' => '/res/pkg/2dbbb7d1/javelin.pkg.js',
       'type' => 'js',
     ),
     '06bacb9a' =>
     array(
       'name' => 'maniphest.pkg.css',
       'symbols' =>
       array(
         0 => 'maniphest-task-summary-css',
         1 => 'maniphest-transaction-detail-css',
         2 => 'phabricator-project-tag-css',
       ),
       'uri' => '/res/pkg/06bacb9a/maniphest.pkg.css',
       'type' => 'css',
     ),
     '98f64f07' =>
     array(
       'name' => 'maniphest.pkg.js',
       'symbols' =>
       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',
       ),
       'uri' => '/res/pkg/98f64f07/maniphest.pkg.js',
       'type' => 'js',
     ),
   ),
   'reverse' =>
   array(
-    'aphront-dialog-view-css' => '4a060444',
-    'aphront-error-view-css' => '4a060444',
-    'aphront-form-view-css' => '4a060444',
-    'aphront-list-filter-view-css' => '4a060444',
-    'aphront-pager-view-css' => '4a060444',
-    'aphront-panel-view-css' => '4a060444',
-    'aphront-table-view-css' => '4a060444',
-    'aphront-tokenizer-control-css' => '4a060444',
-    'aphront-tooltip-css' => '4a060444',
-    'aphront-typeahead-control-css' => '4a060444',
+    'aphront-dialog-view-css' => '4c072d06',
+    'aphront-error-view-css' => '4c072d06',
+    'aphront-list-filter-view-css' => '4c072d06',
+    'aphront-pager-view-css' => '4c072d06',
+    'aphront-panel-view-css' => '4c072d06',
+    'aphront-table-view-css' => '4c072d06',
+    'aphront-tokenizer-control-css' => '4c072d06',
+    'aphront-tooltip-css' => '4c072d06',
+    'aphront-typeahead-control-css' => '4c072d06',
     'differential-changeset-view-css' => '09216861',
     'differential-core-view-css' => '09216861',
     'differential-inline-comment-editor' => 'd07a3bc2',
     'differential-local-commits-view-css' => '09216861',
     'differential-results-table-css' => '09216861',
     'differential-revision-add-comment-css' => '09216861',
     'differential-revision-comment-css' => '09216861',
     'differential-revision-comment-list-css' => '09216861',
     'differential-revision-history-css' => '09216861',
     'differential-revision-list-css' => '09216861',
     'differential-table-of-contents-css' => '09216861',
     'diffusion-commit-view-css' => 'c8ce2d88',
     'diffusion-icons-css' => 'c8ce2d88',
-    'global-drag-and-drop-css' => '4a060444',
+    'global-drag-and-drop-css' => '4c072d06',
     'inline-comment-summary-css' => '09216861',
     'javelin-aphlict' => '4f81c788',
     'javelin-behavior' => '2dbbb7d1',
     'javelin-behavior-aphlict-dropdown' => '4f81c788',
     'javelin-behavior-aphlict-listen' => '4f81c788',
     'javelin-behavior-aphront-basic-tokenizer' => '4f81c788',
     'javelin-behavior-aphront-drag-and-drop-textarea' => 'd07a3bc2',
     'javelin-behavior-aphront-form-disable-on-submit' => '4f81c788',
     'javelin-behavior-audit-preview' => '96909266',
     'javelin-behavior-dark-console' => '4ccfeb47',
     'javelin-behavior-device' => '4f81c788',
     'javelin-behavior-differential-accept-with-errors' => 'd07a3bc2',
     'javelin-behavior-differential-add-reviewers-and-ccs' => 'd07a3bc2',
     'javelin-behavior-differential-comment-jump' => 'd07a3bc2',
     'javelin-behavior-differential-diff-radios' => 'd07a3bc2',
     'javelin-behavior-differential-dropdown-menus' => 'd07a3bc2',
     'javelin-behavior-differential-edit-inline-comments' => 'd07a3bc2',
     'javelin-behavior-differential-feedback-preview' => 'd07a3bc2',
     'javelin-behavior-differential-keyboard-navigation' => 'd07a3bc2',
     'javelin-behavior-differential-populate' => 'd07a3bc2',
     'javelin-behavior-differential-show-more' => 'd07a3bc2',
     'javelin-behavior-differential-toggle-files' => 'd07a3bc2',
     'javelin-behavior-differential-user-select' => 'd07a3bc2',
     'javelin-behavior-diffusion-commit-graph' => '96909266',
     'javelin-behavior-diffusion-pull-lastmodified' => '96909266',
     'javelin-behavior-error-log' => '4ccfeb47',
     'javelin-behavior-global-drag-and-drop' => '4f81c788',
     'javelin-behavior-history-install' => '4f81c788',
     'javelin-behavior-konami' => '4f81c788',
     'javelin-behavior-lightbox-attachments' => '4f81c788',
     'javelin-behavior-load-blame' => 'd07a3bc2',
     'javelin-behavior-maniphest-batch-selector' => '98f64f07',
     'javelin-behavior-maniphest-subpriority-editor' => '98f64f07',
     'javelin-behavior-maniphest-transaction-controls' => '98f64f07',
     'javelin-behavior-maniphest-transaction-expand' => '98f64f07',
     'javelin-behavior-maniphest-transaction-preview' => '98f64f07',
     'javelin-behavior-phabricator-active-nav' => '4f81c788',
     'javelin-behavior-phabricator-autofocus' => '4f81c788',
     'javelin-behavior-phabricator-gesture' => '4f81c788',
     'javelin-behavior-phabricator-hovercards' => '4f81c788',
     'javelin-behavior-phabricator-keyboard-shortcuts' => '4f81c788',
     'javelin-behavior-phabricator-nav' => '4f81c788',
     'javelin-behavior-phabricator-object-selector' => 'd07a3bc2',
     'javelin-behavior-phabricator-oncopy' => '4f81c788',
     'javelin-behavior-phabricator-remarkup-assist' => '4f81c788',
     'javelin-behavior-phabricator-reveal-content' => '4f81c788',
     'javelin-behavior-phabricator-search-typeahead' => '4f81c788',
     'javelin-behavior-phabricator-tooltips' => '4f81c788',
     'javelin-behavior-phabricator-watch-anchor' => '4f81c788',
     'javelin-behavior-refresh-csrf' => '4f81c788',
     'javelin-behavior-repository-crossreference' => 'd07a3bc2',
     'javelin-behavior-toggle-class' => '4f81c788',
     'javelin-behavior-workflow' => '4f81c788',
     'javelin-dom' => '2dbbb7d1',
     'javelin-event' => '2dbbb7d1',
     'javelin-history' => '2dbbb7d1',
     'javelin-install' => '2dbbb7d1',
     'javelin-json' => '2dbbb7d1',
     'javelin-mask' => '2dbbb7d1',
     'javelin-request' => '2dbbb7d1',
     'javelin-resource' => '2dbbb7d1',
     'javelin-stratcom' => '2dbbb7d1',
     'javelin-tokenizer' => '2dbbb7d1',
     'javelin-typeahead' => '2dbbb7d1',
     'javelin-typeahead-normalizer' => '2dbbb7d1',
     'javelin-typeahead-ondemand-source' => '2dbbb7d1',
     'javelin-typeahead-preloaded-source' => '2dbbb7d1',
     'javelin-typeahead-source' => '2dbbb7d1',
     'javelin-uri' => '2dbbb7d1',
     'javelin-util' => '2dbbb7d1',
     'javelin-vector' => '2dbbb7d1',
     'javelin-workflow' => '2dbbb7d1',
-    'lightbox-attachment-css' => '4a060444',
+    'lightbox-attachment-css' => '4c072d06',
     'maniphest-task-summary-css' => '06bacb9a',
     'maniphest-transaction-detail-css' => '06bacb9a',
-    'phabricator-action-list-view-css' => '4a060444',
-    'phabricator-application-launch-view-css' => '4a060444',
+    'phabricator-action-list-view-css' => '4c072d06',
+    'phabricator-application-launch-view-css' => '4c072d06',
     'phabricator-busy' => '4f81c788',
     'phabricator-content-source-view-css' => '09216861',
-    'phabricator-core-css' => '4a060444',
-    'phabricator-crumbs-view-css' => '4a060444',
+    'phabricator-core-css' => '4c072d06',
+    'phabricator-crumbs-view-css' => '4c072d06',
     'phabricator-drag-and-drop-file-upload' => 'd07a3bc2',
     'phabricator-dropdown-menu' => '4f81c788',
     'phabricator-file-upload' => '4f81c788',
-    'phabricator-filetree-view-css' => '4a060444',
-    'phabricator-flag-css' => '4a060444',
-    'phabricator-form-view-css' => '4a060444',
-    'phabricator-header-view-css' => '4a060444',
+    'phabricator-filetree-view-css' => '4c072d06',
+    'phabricator-flag-css' => '4c072d06',
+    'phabricator-header-view-css' => '4c072d06',
     'phabricator-hovercard' => '4f81c788',
-    'phabricator-jump-nav' => '4a060444',
+    'phabricator-jump-nav' => '4c072d06',
     'phabricator-keyboard-shortcut' => '4f81c788',
     'phabricator-keyboard-shortcut-manager' => '4f81c788',
-    'phabricator-main-menu-view' => '4a060444',
+    'phabricator-main-menu-view' => '4c072d06',
     'phabricator-menu-item' => '4f81c788',
-    'phabricator-nav-view-css' => '4a060444',
+    'phabricator-nav-view-css' => '4c072d06',
     'phabricator-notification' => '4f81c788',
-    'phabricator-notification-css' => '4a060444',
-    'phabricator-notification-menu-css' => '4a060444',
-    'phabricator-object-item-list-view-css' => '4a060444',
+    'phabricator-notification-css' => '4c072d06',
+    'phabricator-notification-menu-css' => '4c072d06',
+    'phabricator-object-item-list-view-css' => '4c072d06',
     'phabricator-object-selector-css' => '09216861',
     'phabricator-phtize' => '4f81c788',
     'phabricator-prefab' => '4f81c788',
     'phabricator-project-tag-css' => '06bacb9a',
-    'phabricator-property-list-view-css' => '4a060444',
-    'phabricator-remarkup-css' => '4a060444',
+    'phabricator-property-list-view-css' => '4c072d06',
+    'phabricator-remarkup-css' => '4c072d06',
     'phabricator-shaped-request' => 'd07a3bc2',
-    'phabricator-side-menu-view-css' => '4a060444',
-    'phabricator-standard-page-view' => '4a060444',
-    'phabricator-tag-view-css' => '4a060444',
+    'phabricator-side-menu-view-css' => '4c072d06',
+    'phabricator-standard-page-view' => '4c072d06',
+    'phabricator-tag-view-css' => '4c072d06',
     'phabricator-textareautils' => '4f81c788',
     'phabricator-tooltip' => '4f81c788',
-    'phabricator-transaction-view-css' => '4a060444',
-    'phabricator-zindex-css' => '4a060444',
-    'phui-button-css' => '4a060444',
-    'phui-form-css' => '4a060444',
-    'phui-icon-view-css' => '4a060444',
-    'phui-spacing-css' => '4a060444',
-    'sprite-apps-large-css' => '4a060444',
-    'sprite-gradient-css' => '4a060444',
-    'sprite-icons-css' => '4a060444',
-    'sprite-menu-css' => '4a060444',
-    'syntax-highlighting-css' => '4a060444',
+    'phabricator-transaction-view-css' => '4c072d06',
+    'phabricator-zindex-css' => '4c072d06',
+    'phui-button-css' => '4c072d06',
+    'phui-form-css' => '4c072d06',
+    'phui-form-view-css' => '4c072d06',
+    'phui-icon-view-css' => '4c072d06',
+    'phui-spacing-css' => '4c072d06',
+    'sprite-apps-large-css' => '4c072d06',
+    'sprite-gradient-css' => '4c072d06',
+    'sprite-icons-css' => '4c072d06',
+    'sprite-menu-css' => '4c072d06',
+    'syntax-highlighting-css' => '4c072d06',
   ),
 ));
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
index 1840909b6..d7d80a080 100644
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1,4221 +1,4223 @@
 <?php
 
 /**
  * This file is automatically generated. Use 'arc liberate' to rebuild it.
  * @generated
  * @phutil-library-version 2
  */
 
 phutil_register_library_map(array(
   '__library_version__' => 2,
   'class' =>
   array(
     'Aphront304Response' => 'aphront/response/Aphront304Response.php',
     'Aphront400Response' => 'aphront/response/Aphront400Response.php',
     'Aphront403Response' => 'aphront/response/Aphront403Response.php',
     'Aphront404Response' => 'aphront/response/Aphront404Response.php',
     'AphrontAbstractAttachedFileView' => 'view/control/AphrontAbstractAttachedFileView.php',
     'AphrontAjaxResponse' => 'aphront/response/AphrontAjaxResponse.php',
     'AphrontApplicationConfiguration' => 'aphront/configuration/AphrontApplicationConfiguration.php',
     'AphrontBarView' => 'view/widget/bars/AphrontBarView.php',
     'AphrontCSRFException' => 'aphront/exception/AphrontCSRFException.php',
     'AphrontCalendarEventView' => 'applications/calendar/view/AphrontCalendarEventView.php',
     'AphrontCalendarMonthView' => 'applications/calendar/view/AphrontCalendarMonthView.php',
     'AphrontContextBarView' => 'view/layout/AphrontContextBarView.php',
     'AphrontController' => 'aphront/AphrontController.php',
     'AphrontCursorPagerView' => 'view/control/AphrontCursorPagerView.php',
     'AphrontDefaultApplicationConfiguration' => 'aphront/configuration/AphrontDefaultApplicationConfiguration.php',
     'AphrontDialogResponse' => 'aphront/response/AphrontDialogResponse.php',
     'AphrontDialogView' => 'view/AphrontDialogView.php',
     'AphrontErrorView' => 'view/form/AphrontErrorView.php',
     'AphrontException' => 'aphront/exception/AphrontException.php',
     'AphrontFileResponse' => 'aphront/response/AphrontFileResponse.php',
     'AphrontFormCheckboxControl' => 'view/form/control/AphrontFormCheckboxControl.php',
     'AphrontFormControl' => 'view/form/control/AphrontFormControl.php',
     'AphrontFormCropControl' => 'view/form/control/AphrontFormCropControl.php',
     'AphrontFormDateControl' => 'view/form/control/AphrontFormDateControl.php',
     'AphrontFormDividerControl' => 'view/form/control/AphrontFormDividerControl.php',
     'AphrontFormFileControl' => 'view/form/control/AphrontFormFileControl.php',
     'AphrontFormImageControl' => 'view/form/control/AphrontFormImageControl.php',
     'AphrontFormInsetView' => 'view/form/AphrontFormInsetView.php',
-    'AphrontFormLayoutView' => 'view/form/AphrontFormLayoutView.php',
     'AphrontFormMarkupControl' => 'view/form/control/AphrontFormMarkupControl.php',
     'AphrontFormPasswordControl' => 'view/form/control/AphrontFormPasswordControl.php',
     'AphrontFormPolicyControl' => 'view/form/control/AphrontFormPolicyControl.php',
     'AphrontFormRadioButtonControl' => 'view/form/control/AphrontFormRadioButtonControl.php',
     'AphrontFormRecaptchaControl' => 'view/form/control/AphrontFormRecaptchaControl.php',
     'AphrontFormSelectControl' => 'view/form/control/AphrontFormSelectControl.php',
     'AphrontFormStaticControl' => 'view/form/control/AphrontFormStaticControl.php',
     'AphrontFormSubmitControl' => 'view/form/control/AphrontFormSubmitControl.php',
     'AphrontFormTextAreaControl' => 'view/form/control/AphrontFormTextAreaControl.php',
     'AphrontFormTextControl' => 'view/form/control/AphrontFormTextControl.php',
     'AphrontFormToggleButtonsControl' => 'view/form/control/AphrontFormToggleButtonsControl.php',
     'AphrontFormTokenizerControl' => 'view/form/control/AphrontFormTokenizerControl.php',
     'AphrontFormView' => 'view/form/AphrontFormView.php',
     'AphrontGlyphBarView' => 'view/widget/bars/AphrontGlyphBarView.php',
     'AphrontHTMLResponse' => 'aphront/response/AphrontHTMLResponse.php',
     'AphrontHTTPSink' => 'aphront/sink/AphrontHTTPSink.php',
     'AphrontHTTPSinkTestCase' => 'aphront/sink/__tests__/AphrontHTTPSinkTestCase.php',
     'AphrontIsolatedDatabaseConnectionTestCase' => 'infrastructure/storage/__tests__/AphrontIsolatedDatabaseConnectionTestCase.php',
     'AphrontIsolatedHTTPSink' => 'aphront/sink/AphrontIsolatedHTTPSink.php',
     'AphrontJSONResponse' => 'aphront/response/AphrontJSONResponse.php',
     'AphrontJavelinView' => 'view/AphrontJavelinView.php',
     'AphrontKeyboardShortcutsAvailableView' => 'view/widget/AphrontKeyboardShortcutsAvailableView.php',
     'AphrontListFilterView' => 'view/layout/AphrontListFilterView.php',
     'AphrontMiniPanelView' => 'view/layout/AphrontMiniPanelView.php',
     'AphrontMoreView' => 'view/layout/AphrontMoreView.php',
     'AphrontMultiColumnView' => 'view/layout/AphrontMultiColumnView.php',
     'AphrontMySQLDatabaseConnectionTestCase' => 'infrastructure/storage/__tests__/AphrontMySQLDatabaseConnectionTestCase.php',
     'AphrontNoteView' => 'view/widget/AphrontNoteView.php',
     'AphrontNullView' => 'view/AphrontNullView.php',
     'AphrontPHPHTTPSink' => 'aphront/sink/AphrontPHPHTTPSink.php',
     'AphrontPageView' => 'view/page/AphrontPageView.php',
     'AphrontPagerView' => 'view/control/AphrontPagerView.php',
     'AphrontPanelView' => 'view/layout/AphrontPanelView.php',
     'AphrontPlainTextResponse' => 'aphront/response/AphrontPlainTextResponse.php',
     'AphrontProgressBarView' => 'view/widget/bars/AphrontProgressBarView.php',
     'AphrontProxyResponse' => 'aphront/response/AphrontProxyResponse.php',
     'AphrontRedirectException' => 'aphront/exception/AphrontRedirectException.php',
     'AphrontRedirectResponse' => 'aphront/response/AphrontRedirectResponse.php',
     'AphrontReloadResponse' => 'aphront/response/AphrontReloadResponse.php',
     'AphrontRequest' => 'aphront/AphrontRequest.php',
     'AphrontRequestFailureView' => 'view/page/AphrontRequestFailureView.php',
     'AphrontRequestTestCase' => 'aphront/__tests__/AphrontRequestTestCase.php',
     'AphrontResponse' => 'aphront/response/AphrontResponse.php',
     'AphrontSideNavFilterView' => 'view/layout/AphrontSideNavFilterView.php',
     'AphrontTableView' => 'view/control/AphrontTableView.php',
     'AphrontTagView' => 'view/AphrontTagView.php',
     'AphrontTokenizerTemplateView' => 'view/control/AphrontTokenizerTemplateView.php',
     'AphrontTwoColumnView' => 'view/layout/AphrontTwoColumnView.php',
     'AphrontTypeaheadTemplateView' => 'view/control/AphrontTypeaheadTemplateView.php',
     'AphrontURIMapper' => 'aphront/AphrontURIMapper.php',
     'AphrontUsageException' => 'aphront/exception/AphrontUsageException.php',
     'AphrontView' => 'view/AphrontView.php',
     'AphrontWebpageResponse' => 'aphront/response/AphrontWebpageResponse.php',
     'AuditPeopleMenuEventListener' => 'applications/audit/events/AuditPeopleMenuEventListener.php',
     'CelerityAPI' => 'infrastructure/celerity/CelerityAPI.php',
     'CelerityPhabricatorResourceController' => 'infrastructure/celerity/CelerityPhabricatorResourceController.php',
     'CelerityResourceController' => 'infrastructure/celerity/CelerityResourceController.php',
     'CelerityResourceGraph' => 'infrastructure/celerity/CelerityResourceGraph.php',
     'CelerityResourceMap' => 'infrastructure/celerity/CelerityResourceMap.php',
     'CelerityResourceTransformer' => 'infrastructure/celerity/CelerityResourceTransformer.php',
     'CelerityResourceTransformerTestCase' => 'infrastructure/celerity/__tests__/CelerityResourceTransformerTestCase.php',
     'CeleritySpriteGenerator' => 'infrastructure/celerity/CeleritySpriteGenerator.php',
     'CelerityStaticResourceResponse' => 'infrastructure/celerity/CelerityStaticResourceResponse.php',
     'ConduitAPIMethod' => 'applications/conduit/method/ConduitAPIMethod.php',
     'ConduitAPIRequest' => 'applications/conduit/protocol/ConduitAPIRequest.php',
     'ConduitAPIResponse' => 'applications/conduit/protocol/ConduitAPIResponse.php',
     'ConduitAPI_arcanist_Method' => 'applications/arcanist/conduit/ConduitAPI_arcanist_Method.php',
     'ConduitAPI_arcanist_projectinfo_Method' => 'applications/arcanist/conduit/ConduitAPI_arcanist_projectinfo_Method.php',
     'ConduitAPI_audit_Method' => 'applications/audit/conduit/ConduitAPI_audit_Method.php',
     'ConduitAPI_audit_query_Method' => 'applications/audit/conduit/ConduitAPI_audit_query_Method.php',
     'ConduitAPI_chatlog_Method' => 'applications/chatlog/conduit/ConduitAPI_chatlog_Method.php',
     'ConduitAPI_chatlog_query_Method' => 'applications/chatlog/conduit/ConduitAPI_chatlog_query_Method.php',
     'ConduitAPI_chatlog_record_Method' => 'applications/chatlog/conduit/ConduitAPI_chatlog_record_Method.php',
     'ConduitAPI_conduit_connect_Method' => 'applications/conduit/method/ConduitAPI_conduit_connect_Method.php',
     'ConduitAPI_conduit_getcertificate_Method' => 'applications/conduit/method/ConduitAPI_conduit_getcertificate_Method.php',
     'ConduitAPI_conduit_ping_Method' => 'applications/conduit/method/ConduitAPI_conduit_ping_Method.php',
     'ConduitAPI_conduit_query_Method' => 'applications/conduit/method/ConduitAPI_conduit_query_Method.php',
     'ConduitAPI_conpherence_Method' => 'applications/conpherence/conduit/ConduitAPI_conpherence_Method.php',
     'ConduitAPI_conpherence_createthread_Method' => 'applications/conpherence/conduit/ConduitAPI_conpherence_createthread_Method.php',
     'ConduitAPI_conpherence_querythread_Method' => 'applications/conpherence/conduit/ConduitAPI_conpherence_querythread_Method.php',
     'ConduitAPI_conpherence_querytransaction_Method' => 'applications/conpherence/conduit/ConduitAPI_conpherence_querytransaction_Method.php',
     'ConduitAPI_conpherence_updatethread_Method' => 'applications/conpherence/conduit/ConduitAPI_conpherence_updatethread_Method.php',
     'ConduitAPI_differential_Method' => 'applications/differential/conduit/ConduitAPI_differential_Method.php',
     'ConduitAPI_differential_close_Method' => 'applications/differential/conduit/ConduitAPI_differential_close_Method.php',
     'ConduitAPI_differential_createcomment_Method' => 'applications/differential/conduit/ConduitAPI_differential_createcomment_Method.php',
     'ConduitAPI_differential_creatediff_Method' => 'applications/differential/conduit/ConduitAPI_differential_creatediff_Method.php',
     'ConduitAPI_differential_createinline_Method' => 'applications/differential/conduit/ConduitAPI_differential_createinline_Method.php',
     'ConduitAPI_differential_createrawdiff_Method' => 'applications/differential/conduit/ConduitAPI_differential_createrawdiff_Method.php',
     'ConduitAPI_differential_createrevision_Method' => 'applications/differential/conduit/ConduitAPI_differential_createrevision_Method.php',
     'ConduitAPI_differential_find_Method' => 'applications/differential/conduit/ConduitAPI_differential_find_Method.php',
     'ConduitAPI_differential_finishpostponedlinters_Method' => 'applications/differential/conduit/ConduitAPI_differential_finishpostponedlinters_Method.php',
     'ConduitAPI_differential_getalldiffs_Method' => 'applications/differential/conduit/ConduitAPI_differential_getalldiffs_Method.php',
     'ConduitAPI_differential_getcommitmessage_Method' => 'applications/differential/conduit/ConduitAPI_differential_getcommitmessage_Method.php',
     'ConduitAPI_differential_getcommitpaths_Method' => 'applications/differential/conduit/ConduitAPI_differential_getcommitpaths_Method.php',
     'ConduitAPI_differential_getdiff_Method' => 'applications/differential/conduit/ConduitAPI_differential_getdiff_Method.php',
     'ConduitAPI_differential_getrevision_Method' => 'applications/differential/conduit/ConduitAPI_differential_getrevision_Method.php',
     'ConduitAPI_differential_getrevisioncomments_Method' => 'applications/differential/conduit/ConduitAPI_differential_getrevisioncomments_Method.php',
     'ConduitAPI_differential_markcommitted_Method' => 'applications/differential/conduit/ConduitAPI_differential_markcommitted_Method.php',
     'ConduitAPI_differential_parsecommitmessage_Method' => 'applications/differential/conduit/ConduitAPI_differential_parsecommitmessage_Method.php',
     'ConduitAPI_differential_query_Method' => 'applications/differential/conduit/ConduitAPI_differential_query_Method.php',
     'ConduitAPI_differential_setdiffproperty_Method' => 'applications/differential/conduit/ConduitAPI_differential_setdiffproperty_Method.php',
     'ConduitAPI_differential_updaterevision_Method' => 'applications/differential/conduit/ConduitAPI_differential_updaterevision_Method.php',
     'ConduitAPI_differential_updateunitresults_Method' => 'applications/differential/conduit/ConduitAPI_differential_updateunitresults_Method.php',
     'ConduitAPI_diffusion_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_Method.php',
     'ConduitAPI_diffusion_abstractquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_abstractquery_Method.php',
     'ConduitAPI_diffusion_branchquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_branchquery_Method.php',
     'ConduitAPI_diffusion_browsequery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_browsequery_Method.php',
     'ConduitAPI_diffusion_commitbranchesquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_commitbranchesquery_Method.php',
     'ConduitAPI_diffusion_commitparentsquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_commitparentsquery_Method.php',
     'ConduitAPI_diffusion_diffquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_diffquery_Method.php',
     'ConduitAPI_diffusion_existsquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_existsquery_Method.php',
     'ConduitAPI_diffusion_expandshortcommitquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_expandshortcommitquery_Method.php',
     'ConduitAPI_diffusion_filecontentquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_filecontentquery_Method.php',
     'ConduitAPI_diffusion_findsymbols_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_findsymbols_Method.php',
     'ConduitAPI_diffusion_getcommits_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_getcommits_Method.php',
     'ConduitAPI_diffusion_getlintmessages_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_getlintmessages_Method.php',
     'ConduitAPI_diffusion_getrecentcommitsbypath_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_getrecentcommitsbypath_Method.php',
     'ConduitAPI_diffusion_historyquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_historyquery_Method.php',
     'ConduitAPI_diffusion_lastmodifiedquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_lastmodifiedquery_Method.php',
     'ConduitAPI_diffusion_mergedcommitsquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_mergedcommitsquery_Method.php',
     'ConduitAPI_diffusion_rawdiffquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_rawdiffquery_Method.php',
     'ConduitAPI_diffusion_readmequery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_readmequery_Method.php',
     'ConduitAPI_diffusion_refsquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_refsquery_Method.php',
     'ConduitAPI_diffusion_searchquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_searchquery_Method.php',
     'ConduitAPI_diffusion_stablecommitnamequery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_stablecommitnamequery_Method.php',
     'ConduitAPI_diffusion_tagsquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_tagsquery_Method.php',
     'ConduitAPI_feed_Method' => 'applications/feed/conduit/ConduitAPI_feed_Method.php',
     'ConduitAPI_feed_publish_Method' => 'applications/feed/conduit/ConduitAPI_feed_publish_Method.php',
     'ConduitAPI_feed_query_Method' => 'applications/feed/conduit/ConduitAPI_feed_query_Method.php',
     'ConduitAPI_file_Method' => 'applications/files/conduit/ConduitAPI_file_Method.php',
     'ConduitAPI_file_download_Method' => 'applications/files/conduit/ConduitAPI_file_download_Method.php',
     'ConduitAPI_file_info_Method' => 'applications/files/conduit/ConduitAPI_file_info_Method.php',
     'ConduitAPI_file_upload_Method' => 'applications/files/conduit/ConduitAPI_file_upload_Method.php',
     'ConduitAPI_file_uploadhash_Method' => 'applications/files/conduit/ConduitAPI_file_uploadhash_Method.php',
     'ConduitAPI_flag_Method' => 'applications/flag/conduit/ConduitAPI_flag_Method.php',
     'ConduitAPI_flag_delete_Method' => 'applications/flag/conduit/ConduitAPI_flag_delete_Method.php',
     'ConduitAPI_flag_edit_Method' => 'applications/flag/conduit/ConduitAPI_flag_edit_Method.php',
     'ConduitAPI_flag_query_Method' => 'applications/flag/conduit/ConduitAPI_flag_query_Method.php',
     'ConduitAPI_macro_Method' => 'applications/macro/conduit/ConduitAPI_macro_Method.php',
     'ConduitAPI_macro_creatememe_Method' => 'applications/macro/conduit/ConduitAPI_macro_creatememe_Method.php',
     'ConduitAPI_macro_query_Method' => 'applications/macro/conduit/ConduitAPI_macro_query_Method.php',
     'ConduitAPI_maniphest_Method' => 'applications/maniphest/conduit/ConduitAPI_maniphest_Method.php',
     'ConduitAPI_maniphest_createtask_Method' => 'applications/maniphest/conduit/ConduitAPI_maniphest_createtask_Method.php',
     'ConduitAPI_maniphest_find_Method' => 'applications/maniphest/conduit/ConduitAPI_maniphest_find_Method.php',
     'ConduitAPI_maniphest_gettasktransactions_Method' => 'applications/maniphest/conduit/ConduitAPI_maniphest_gettasktransactions_Method.php',
     'ConduitAPI_maniphest_info_Method' => 'applications/maniphest/conduit/ConduitAPI_maniphest_info_Method.php',
     'ConduitAPI_maniphest_query_Method' => 'applications/maniphest/conduit/ConduitAPI_maniphest_query_Method.php',
     'ConduitAPI_maniphest_update_Method' => 'applications/maniphest/conduit/ConduitAPI_maniphest_update_Method.php',
     'ConduitAPI_owners_Method' => 'applications/owners/conduit/ConduitAPI_owners_Method.php',
     'ConduitAPI_owners_query_Method' => 'applications/owners/conduit/ConduitAPI_owners_query_Method.php',
     'ConduitAPI_paste_Method' => 'applications/paste/conduit/ConduitAPI_paste_Method.php',
     'ConduitAPI_paste_create_Method' => 'applications/paste/conduit/ConduitAPI_paste_create_Method.php',
     'ConduitAPI_paste_info_Method' => 'applications/paste/conduit/ConduitAPI_paste_info_Method.php',
     'ConduitAPI_paste_query_Method' => 'applications/paste/conduit/ConduitAPI_paste_query_Method.php',
     'ConduitAPI_phid_Method' => 'applications/phid/conduit/ConduitAPI_phid_Method.php',
     'ConduitAPI_phid_info_Method' => 'applications/phid/conduit/ConduitAPI_phid_info_Method.php',
     'ConduitAPI_phid_lookup_Method' => 'applications/phid/conduit/ConduitAPI_phid_lookup_Method.php',
     'ConduitAPI_phid_query_Method' => 'applications/phid/conduit/ConduitAPI_phid_query_Method.php',
     'ConduitAPI_phpast_Method' => 'applications/phpast/conduit/ConduitAPI_phpast_Method.php',
     'ConduitAPI_phpast_getast_Method' => 'applications/phpast/conduit/ConduitAPI_phpast_getast_Method.php',
     'ConduitAPI_phpast_version_Method' => 'applications/phpast/conduit/ConduitAPI_phpast_version_Method.php',
     'ConduitAPI_phriction_Method' => 'applications/phriction/conduit/ConduitAPI_phriction_Method.php',
     'ConduitAPI_phriction_edit_Method' => 'applications/phriction/conduit/ConduitAPI_phriction_edit_Method.php',
     'ConduitAPI_phriction_history_Method' => 'applications/phriction/conduit/ConduitAPI_phriction_history_Method.php',
     'ConduitAPI_phriction_info_Method' => 'applications/phriction/conduit/ConduitAPI_phriction_info_Method.php',
     'ConduitAPI_project_Method' => 'applications/project/conduit/ConduitAPI_project_Method.php',
     'ConduitAPI_project_query_Method' => 'applications/project/conduit/ConduitAPI_project_query_Method.php',
     'ConduitAPI_releeph_Method' => 'applications/releeph/conduit/ConduitAPI_releeph_Method.php',
     'ConduitAPI_releeph_getbranches_Method' => 'applications/releeph/conduit/ConduitAPI_releeph_getbranches_Method.php',
     'ConduitAPI_releeph_projectinfo_Method' => 'applications/releeph/conduit/ConduitAPI_releeph_projectinfo_Method.php',
     'ConduitAPI_releeph_queryrequests_Method' => 'applications/releeph/conduit/ConduitAPI_releeph_queryrequests_Method.php',
     'ConduitAPI_releeph_request_Method' => 'applications/releeph/conduit/ConduitAPI_releeph_request_Method.php',
     'ConduitAPI_releephwork_canpush_Method' => 'applications/releeph/conduit/work/ConduitAPI_releephwork_canpush_Method.php',
     'ConduitAPI_releephwork_getauthorinfo_Method' => 'applications/releeph/conduit/work/ConduitAPI_releephwork_getauthorinfo_Method.php',
     'ConduitAPI_releephwork_getbranch_Method' => 'applications/releeph/conduit/work/ConduitAPI_releephwork_getbranch_Method.php',
     'ConduitAPI_releephwork_getbranchcommitmessage_Method' => 'applications/releeph/conduit/work/ConduitAPI_releephwork_getbranchcommitmessage_Method.php',
     'ConduitAPI_releephwork_getcommitmessage_Method' => 'applications/releeph/conduit/work/ConduitAPI_releephwork_getcommitmessage_Method.php',
     'ConduitAPI_releephwork_getorigcommitmessage_Method' => 'applications/releeph/conduit/work/ConduitAPI_releephwork_getorigcommitmessage_Method.php',
     'ConduitAPI_releephwork_nextrequest_Method' => 'applications/releeph/conduit/work/ConduitAPI_releephwork_nextrequest_Method.php',
     'ConduitAPI_releephwork_record_Method' => 'applications/releeph/conduit/work/ConduitAPI_releephwork_record_Method.php',
     'ConduitAPI_releephwork_recordpickstatus_Method' => 'applications/releeph/conduit/work/ConduitAPI_releephwork_recordpickstatus_Method.php',
     'ConduitAPI_remarkup_process_Method' => 'applications/remarkup/conduit/ConduitAPI_remarkup_process_Method.php',
     'ConduitAPI_repository_Method' => 'applications/repository/conduit/ConduitAPI_repository_Method.php',
     'ConduitAPI_repository_create_Method' => 'applications/repository/conduit/ConduitAPI_repository_create_Method.php',
     'ConduitAPI_repository_query_Method' => 'applications/repository/conduit/ConduitAPI_repository_query_Method.php',
     'ConduitAPI_slowvote_Method' => 'applications/slowvote/conduit/ConduitAPI_slowvote_Method.php',
     'ConduitAPI_slowvote_info_Method' => 'applications/slowvote/conduit/ConduitAPI_slowvote_info_Method.php',
     'ConduitAPI_token_Method' => 'applications/tokens/conduit/ConduitAPI_token_Method.php',
     'ConduitAPI_token_give_Method' => 'applications/tokens/conduit/ConduitAPI_token_give_Method.php',
     'ConduitAPI_token_given_Method' => 'applications/tokens/conduit/ConduitAPI_token_given_Method.php',
     'ConduitAPI_token_query_Method' => 'applications/tokens/conduit/ConduitAPI_token_query_Method.php',
     'ConduitAPI_user_Method' => 'applications/people/conduit/ConduitAPI_user_Method.php',
     'ConduitAPI_user_addstatus_Method' => 'applications/people/conduit/ConduitAPI_user_addstatus_Method.php',
     'ConduitAPI_user_disable_Method' => 'applications/people/conduit/ConduitAPI_user_disable_Method.php',
     'ConduitAPI_user_enable_Method' => 'applications/people/conduit/ConduitAPI_user_enable_Method.php',
     'ConduitAPI_user_find_Method' => 'applications/people/conduit/ConduitAPI_user_find_Method.php',
     'ConduitAPI_user_info_Method' => 'applications/people/conduit/ConduitAPI_user_info_Method.php',
     'ConduitAPI_user_query_Method' => 'applications/people/conduit/ConduitAPI_user_query_Method.php',
     'ConduitAPI_user_removestatus_Method' => 'applications/people/conduit/ConduitAPI_user_removestatus_Method.php',
     'ConduitAPI_user_whoami_Method' => 'applications/people/conduit/ConduitAPI_user_whoami_Method.php',
     'ConduitCall' => 'applications/conduit/call/ConduitCall.php',
     'ConduitCallTestCase' => 'applications/conduit/call/__tests__/ConduitCallTestCase.php',
     'ConduitException' => 'applications/conduit/protocol/ConduitException.php',
     'ConduitSSHWorkflow' => 'applications/conduit/ssh/ConduitSSHWorkflow.php',
     'ConpherenceConfigOptions' => 'applications/conpherence/config/ConpherenceConfigOptions.php',
     'ConpherenceConstants' => 'applications/conpherence/constants/ConpherenceConstants.php',
     'ConpherenceController' => 'applications/conpherence/controller/ConpherenceController.php',
     'ConpherenceCreateThreadMailReceiver' => 'applications/conpherence/mail/ConpherenceCreateThreadMailReceiver.php',
     'ConpherenceDAO' => 'applications/conpherence/storage/ConpherenceDAO.php',
     'ConpherenceEditor' => 'applications/conpherence/editor/ConpherenceEditor.php',
     'ConpherenceFileWidgetView' => 'applications/conpherence/view/ConpherenceFileWidgetView.php',
     'ConpherenceHovercardEventListener' => 'applications/conpherence/events/ConpherenceHovercardEventListener.php',
     'ConpherenceLayoutView' => 'applications/conpherence/view/ConpherenceLayoutView.php',
     'ConpherenceListController' => 'applications/conpherence/controller/ConpherenceListController.php',
     'ConpherenceMenuItemView' => 'applications/conpherence/view/ConpherenceMenuItemView.php',
     'ConpherenceNewController' => 'applications/conpherence/controller/ConpherenceNewController.php',
     'ConpherenceNotificationPanelController' => 'applications/conpherence/controller/ConpherenceNotificationPanelController.php',
     'ConpherenceParticipant' => 'applications/conpherence/storage/ConpherenceParticipant.php',
     'ConpherenceParticipantCountQuery' => 'applications/conpherence/query/ConpherenceParticipantCountQuery.php',
     'ConpherenceParticipantQuery' => 'applications/conpherence/query/ConpherenceParticipantQuery.php',
     'ConpherenceParticipationStatus' => 'applications/conpherence/constants/ConpherenceParticipationStatus.php',
     'ConpherencePeopleMenuEventListener' => 'applications/conpherence/events/ConpherencePeopleMenuEventListener.php',
     'ConpherencePeopleWidgetView' => 'applications/conpherence/view/ConpherencePeopleWidgetView.php',
     'ConpherenceReplyHandler' => 'applications/conpherence/mail/ConpherenceReplyHandler.php',
     'ConpherenceSettings' => 'applications/conpherence/constants/ConpherenceSettings.php',
     'ConpherenceThread' => 'applications/conpherence/storage/ConpherenceThread.php',
     'ConpherenceThreadListView' => 'applications/conpherence/view/ConpherenceThreadListView.php',
     'ConpherenceThreadMailReceiver' => 'applications/conpherence/mail/ConpherenceThreadMailReceiver.php',
     'ConpherenceThreadQuery' => 'applications/conpherence/query/ConpherenceThreadQuery.php',
     'ConpherenceTimeUtil' => 'applications/conpherence/util/ConpherenceTimeUtil.php',
     'ConpherenceTimeUtilTestCase' => 'applications/conpherence/__tests__/ConpherenceTimeUtilTestCase.php',
     'ConpherenceTransaction' => 'applications/conpherence/storage/ConpherenceTransaction.php',
     'ConpherenceTransactionComment' => 'applications/conpherence/storage/ConpherenceTransactionComment.php',
     'ConpherenceTransactionQuery' => 'applications/conpherence/query/ConpherenceTransactionQuery.php',
     'ConpherenceTransactionType' => 'applications/conpherence/constants/ConpherenceTransactionType.php',
     'ConpherenceTransactionView' => 'applications/conpherence/view/ConpherenceTransactionView.php',
     'ConpherenceUpdateActions' => 'applications/conpherence/constants/ConpherenceUpdateActions.php',
     'ConpherenceUpdateController' => 'applications/conpherence/controller/ConpherenceUpdateController.php',
     'ConpherenceViewController' => 'applications/conpherence/controller/ConpherenceViewController.php',
     'ConpherenceWidgetController' => 'applications/conpherence/controller/ConpherenceWidgetController.php',
     'ConpherenceWidgetView' => 'applications/conpherence/view/ConpherenceWidgetView.php',
     'DarkConsoleController' => 'aphront/console/DarkConsoleController.php',
     'DarkConsoleCore' => 'aphront/console/DarkConsoleCore.php',
     'DarkConsoleDataController' => 'aphront/console/DarkConsoleDataController.php',
     'DarkConsoleErrorLogPlugin' => 'aphront/console/plugin/DarkConsoleErrorLogPlugin.php',
     'DarkConsoleErrorLogPluginAPI' => 'aphront/console/plugin/errorlog/DarkConsoleErrorLogPluginAPI.php',
     'DarkConsoleEventPlugin' => 'aphront/console/plugin/DarkConsoleEventPlugin.php',
     'DarkConsoleEventPluginAPI' => 'aphront/console/plugin/event/DarkConsoleEventPluginAPI.php',
     'DarkConsolePlugin' => 'aphront/console/plugin/DarkConsolePlugin.php',
     'DarkConsoleRequestPlugin' => 'aphront/console/plugin/DarkConsoleRequestPlugin.php',
     'DarkConsoleServicesPlugin' => 'aphront/console/plugin/DarkConsoleServicesPlugin.php',
     'DarkConsoleXHProfPlugin' => 'aphront/console/plugin/DarkConsoleXHProfPlugin.php',
     'DarkConsoleXHProfPluginAPI' => 'aphront/console/plugin/xhprof/DarkConsoleXHProfPluginAPI.php',
     'DatabaseConfigurationProvider' => 'infrastructure/storage/configuration/DatabaseConfigurationProvider.php',
     'DefaultDatabaseConfigurationProvider' => 'infrastructure/storage/configuration/DefaultDatabaseConfigurationProvider.php',
     'DifferentialAction' => 'applications/differential/constants/DifferentialAction.php',
     'DifferentialActionHasNoEffectException' => 'applications/differential/exception/DifferentialActionHasNoEffectException.php',
     'DifferentialAddCommentView' => 'applications/differential/view/DifferentialAddCommentView.php',
     'DifferentialAffectedPath' => 'applications/differential/storage/DifferentialAffectedPath.php',
     'DifferentialApplyPatchFieldSpecification' => 'applications/differential/field/specification/DifferentialApplyPatchFieldSpecification.php',
     'DifferentialArcanistProjectFieldSpecification' => 'applications/differential/field/specification/DifferentialArcanistProjectFieldSpecification.php',
     'DifferentialAsanaRepresentationFieldSpecification' => 'applications/differential/field/specification/DifferentialAsanaRepresentationFieldSpecification.php',
     'DifferentialAuditorsFieldSpecification' => 'applications/differential/field/specification/DifferentialAuditorsFieldSpecification.php',
     'DifferentialAuthorFieldSpecification' => 'applications/differential/field/specification/DifferentialAuthorFieldSpecification.php',
     'DifferentialAuxiliaryField' => 'applications/differential/storage/DifferentialAuxiliaryField.php',
     'DifferentialBlameRevisionFieldSpecification' => 'applications/differential/field/specification/DifferentialBlameRevisionFieldSpecification.php',
     'DifferentialBranchFieldSpecification' => 'applications/differential/field/specification/DifferentialBranchFieldSpecification.php',
     'DifferentialCCWelcomeMail' => 'applications/differential/mail/DifferentialCCWelcomeMail.php',
     'DifferentialCCsFieldSpecification' => 'applications/differential/field/specification/DifferentialCCsFieldSpecification.php',
     'DifferentialChangeType' => 'applications/differential/constants/DifferentialChangeType.php',
     'DifferentialChangeset' => 'applications/differential/storage/DifferentialChangeset.php',
     'DifferentialChangesetDetailView' => 'applications/differential/view/DifferentialChangesetDetailView.php',
     'DifferentialChangesetFileTreeSideNavBuilder' => 'applications/differential/view/DifferentialChangesetFileTreeSideNavBuilder.php',
     'DifferentialChangesetHTMLRenderer' => 'applications/differential/render/DifferentialChangesetHTMLRenderer.php',
     'DifferentialChangesetListView' => 'applications/differential/view/DifferentialChangesetListView.php',
     'DifferentialChangesetOneUpRenderer' => 'applications/differential/render/DifferentialChangesetOneUpRenderer.php',
     'DifferentialChangesetOneUpTestRenderer' => 'applications/differential/render/DifferentialChangesetOneUpTestRenderer.php',
     'DifferentialChangesetParser' => 'applications/differential/parser/DifferentialChangesetParser.php',
     'DifferentialChangesetParserTestCase' => 'applications/differential/parser/__tests__/DifferentialChangesetParserTestCase.php',
     'DifferentialChangesetRenderer' => 'applications/differential/render/DifferentialChangesetRenderer.php',
     'DifferentialChangesetTestRenderer' => 'applications/differential/render/DifferentialChangesetTestRenderer.php',
     'DifferentialChangesetTwoUpRenderer' => 'applications/differential/render/DifferentialChangesetTwoUpRenderer.php',
     'DifferentialChangesetTwoUpTestRenderer' => 'applications/differential/render/DifferentialChangesetTwoUpTestRenderer.php',
     'DifferentialChangesetViewController' => 'applications/differential/controller/DifferentialChangesetViewController.php',
     'DifferentialComment' => 'applications/differential/storage/DifferentialComment.php',
     'DifferentialCommentEditor' => 'applications/differential/editor/DifferentialCommentEditor.php',
     'DifferentialCommentMail' => 'applications/differential/mail/DifferentialCommentMail.php',
     'DifferentialCommentPreviewController' => 'applications/differential/controller/DifferentialCommentPreviewController.php',
     'DifferentialCommentQuery' => 'applications/differential/query/DifferentialCommentQuery.php',
     'DifferentialCommentSaveController' => 'applications/differential/controller/DifferentialCommentSaveController.php',
     'DifferentialCommitsFieldSpecification' => 'applications/differential/field/specification/DifferentialCommitsFieldSpecification.php',
     'DifferentialConflictsFieldSpecification' => 'applications/differential/field/specification/DifferentialConflictsFieldSpecification.php',
     'DifferentialController' => 'applications/differential/controller/DifferentialController.php',
     'DifferentialDAO' => 'applications/differential/storage/DifferentialDAO.php',
     'DifferentialDateCreatedFieldSpecification' => 'applications/differential/field/specification/DifferentialDateCreatedFieldSpecification.php',
     'DifferentialDateModifiedFieldSpecification' => 'applications/differential/field/specification/DifferentialDateModifiedFieldSpecification.php',
     'DifferentialDefaultFieldSelector' => 'applications/differential/field/selector/DifferentialDefaultFieldSelector.php',
     'DifferentialDependenciesFieldSpecification' => 'applications/differential/field/specification/DifferentialDependenciesFieldSpecification.php',
     'DifferentialDependsOnFieldSpecification' => 'applications/differential/field/specification/DifferentialDependsOnFieldSpecification.php',
     'DifferentialDiff' => 'applications/differential/storage/DifferentialDiff.php',
     'DifferentialDiffContentMail' => 'applications/differential/mail/DifferentialDiffContentMail.php',
     'DifferentialDiffCreateController' => 'applications/differential/controller/DifferentialDiffCreateController.php',
     'DifferentialDiffProperty' => 'applications/differential/storage/DifferentialDiffProperty.php',
     'DifferentialDiffQuery' => 'applications/differential/query/DifferentialDiffQuery.php',
     'DifferentialDiffTableOfContentsView' => 'applications/differential/view/DifferentialDiffTableOfContentsView.php',
     'DifferentialDiffTestCase' => 'applications/differential/storage/__tests__/DifferentialDiffTestCase.php',
     'DifferentialDiffViewController' => 'applications/differential/controller/DifferentialDiffViewController.php',
     'DifferentialDiffViewPolicyFieldSpecification' => 'applications/differential/field/specification/DifferentialDiffViewPolicyFieldSpecification.php',
     'DifferentialDoorkeeperRevisionFeedStoryPublisher' => 'applications/differential/doorkeeper/DifferentialDoorkeeperRevisionFeedStoryPublisher.php',
     'DifferentialException' => 'applications/differential/exception/DifferentialException.php',
     'DifferentialExceptionMail' => 'applications/differential/mail/DifferentialExceptionMail.php',
     'DifferentialExportPatchFieldSpecification' => 'applications/differential/field/specification/DifferentialExportPatchFieldSpecification.php',
     'DifferentialFieldDataNotAvailableException' => 'applications/differential/field/exception/DifferentialFieldDataNotAvailableException.php',
     'DifferentialFieldParseException' => 'applications/differential/field/exception/DifferentialFieldParseException.php',
     'DifferentialFieldSelector' => 'applications/differential/field/selector/DifferentialFieldSelector.php',
     'DifferentialFieldSpecification' => 'applications/differential/field/specification/DifferentialFieldSpecification.php',
     'DifferentialFieldSpecificationIncompleteException' => 'applications/differential/field/exception/DifferentialFieldSpecificationIncompleteException.php',
     'DifferentialFieldValidationException' => 'applications/differential/field/exception/DifferentialFieldValidationException.php',
     'DifferentialFreeformFieldSpecification' => 'applications/differential/field/specification/DifferentialFreeformFieldSpecification.php',
     'DifferentialFreeformFieldTestCase' => 'applications/differential/field/specification/__tests__/DifferentialFreeformFieldTestCase.php',
     'DifferentialGitSVNIDFieldSpecification' => 'applications/differential/field/specification/DifferentialGitSVNIDFieldSpecification.php',
     'DifferentialHostFieldSpecification' => 'applications/differential/field/specification/DifferentialHostFieldSpecification.php',
     'DifferentialHovercardEventListener' => 'applications/differential/events/DifferentialHovercardEventListener.php',
     'DifferentialHunk' => 'applications/differential/storage/DifferentialHunk.php',
     'DifferentialHunkParser' => 'applications/differential/parser/DifferentialHunkParser.php',
     'DifferentialHunkParserTestCase' => 'applications/differential/parser/__tests__/DifferentialHunkParserTestCase.php',
     'DifferentialHunkTestCase' => 'applications/differential/storage/__tests__/DifferentialHunkTestCase.php',
     'DifferentialInlineComment' => 'applications/differential/storage/DifferentialInlineComment.php',
     'DifferentialInlineCommentEditController' => 'applications/differential/controller/DifferentialInlineCommentEditController.php',
     'DifferentialInlineCommentEditView' => 'applications/differential/view/DifferentialInlineCommentEditView.php',
     'DifferentialInlineCommentPreviewController' => 'applications/differential/controller/DifferentialInlineCommentPreviewController.php',
     'DifferentialInlineCommentQuery' => 'applications/differential/query/DifferentialInlineCommentQuery.php',
     'DifferentialInlineCommentView' => 'applications/differential/view/DifferentialInlineCommentView.php',
     'DifferentialLinesFieldSpecification' => 'applications/differential/field/specification/DifferentialLinesFieldSpecification.php',
     'DifferentialLintFieldSpecification' => 'applications/differential/field/specification/DifferentialLintFieldSpecification.php',
     'DifferentialLintStatus' => 'applications/differential/constants/DifferentialLintStatus.php',
     'DifferentialLocalCommitsView' => 'applications/differential/view/DifferentialLocalCommitsView.php',
     'DifferentialMail' => 'applications/differential/mail/DifferentialMail.php',
     'DifferentialMailPhase' => 'applications/differential/constants/DifferentialMailPhase.php',
     'DifferentialManiphestTasksFieldSpecification' => 'applications/differential/field/specification/DifferentialManiphestTasksFieldSpecification.php',
     'DifferentialNewDiffMail' => 'applications/differential/mail/DifferentialNewDiffMail.php',
     'DifferentialPHIDTypeRevision' => 'applications/differential/phid/DifferentialPHIDTypeRevision.php',
     'DifferentialParseRenderTestCase' => 'applications/differential/__tests__/DifferentialParseRenderTestCase.php',
     'DifferentialPathFieldSpecification' => 'applications/differential/field/specification/DifferentialPathFieldSpecification.php',
     'DifferentialPeopleMenuEventListener' => 'applications/differential/events/DifferentialPeopleMenuEventListener.php',
     'DifferentialPrimaryPaneView' => 'applications/differential/view/DifferentialPrimaryPaneView.php',
     'DifferentialReleephRequestFieldSpecification' => 'applications/releeph/differential/DifferentialReleephRequestFieldSpecification.php',
     'DifferentialRemarkupRule' => 'applications/differential/remarkup/DifferentialRemarkupRule.php',
     'DifferentialReplyHandler' => 'applications/differential/mail/DifferentialReplyHandler.php',
     'DifferentialResultsTableView' => 'applications/differential/view/DifferentialResultsTableView.php',
     'DifferentialRevertPlanFieldSpecification' => 'applications/differential/field/specification/DifferentialRevertPlanFieldSpecification.php',
     'DifferentialReviewRequestMail' => 'applications/differential/mail/DifferentialReviewRequestMail.php',
     'DifferentialReviewedByFieldSpecification' => 'applications/differential/field/specification/DifferentialReviewedByFieldSpecification.php',
     'DifferentialReviewer' => 'applications/differential/storage/DifferentialReviewer.php',
     'DifferentialReviewerStatus' => 'applications/differential/constants/DifferentialReviewerStatus.php',
     'DifferentialReviewersFieldSpecification' => 'applications/differential/field/specification/DifferentialReviewersFieldSpecification.php',
     'DifferentialRevision' => 'applications/differential/storage/DifferentialRevision.php',
     'DifferentialRevisionCommentListView' => 'applications/differential/view/DifferentialRevisionCommentListView.php',
     'DifferentialRevisionCommentView' => 'applications/differential/view/DifferentialRevisionCommentView.php',
     'DifferentialRevisionControlSystem' => 'applications/differential/constants/DifferentialRevisionControlSystem.php',
     'DifferentialRevisionDetailRenderer' => 'applications/differential/controller/DifferentialRevisionDetailRenderer.php',
     'DifferentialRevisionDetailView' => 'applications/differential/view/DifferentialRevisionDetailView.php',
     'DifferentialRevisionEditController' => 'applications/differential/controller/DifferentialRevisionEditController.php',
     'DifferentialRevisionEditor' => 'applications/differential/editor/DifferentialRevisionEditor.php',
     'DifferentialRevisionIDFieldParserTestCase' => 'applications/differential/field/specification/__tests__/DifferentialRevisionIDFieldParserTestCase.php',
     'DifferentialRevisionIDFieldSpecification' => 'applications/differential/field/specification/DifferentialRevisionIDFieldSpecification.php',
     'DifferentialRevisionListController' => 'applications/differential/controller/DifferentialRevisionListController.php',
     'DifferentialRevisionListView' => 'applications/differential/view/DifferentialRevisionListView.php',
     'DifferentialRevisionMailReceiver' => 'applications/differential/mail/DifferentialRevisionMailReceiver.php',
     'DifferentialRevisionQuery' => 'applications/differential/query/DifferentialRevisionQuery.php',
     'DifferentialRevisionSearchEngine' => 'applications/differential/query/DifferentialRevisionSearchEngine.php',
     'DifferentialRevisionStatsView' => 'applications/differential/view/DifferentialRevisionStatsView.php',
     'DifferentialRevisionStatus' => 'applications/differential/constants/DifferentialRevisionStatus.php',
     'DifferentialRevisionStatusFieldSpecification' => 'applications/differential/field/specification/DifferentialRevisionStatusFieldSpecification.php',
     'DifferentialRevisionUpdateHistoryView' => 'applications/differential/view/DifferentialRevisionUpdateHistoryView.php',
     'DifferentialRevisionViewController' => 'applications/differential/controller/DifferentialRevisionViewController.php',
     'DifferentialSearchIndexer' => 'applications/differential/search/DifferentialSearchIndexer.php',
     'DifferentialSubscribeController' => 'applications/differential/controller/DifferentialSubscribeController.php',
     'DifferentialSummaryFieldSpecification' => 'applications/differential/field/specification/DifferentialSummaryFieldSpecification.php',
     'DifferentialTasksAttacher' => 'applications/differential/DifferentialTasksAttacher.php',
     'DifferentialTestPlanFieldSpecification' => 'applications/differential/field/specification/DifferentialTestPlanFieldSpecification.php',
     'DifferentialTitleFieldSpecification' => 'applications/differential/field/specification/DifferentialTitleFieldSpecification.php',
     'DifferentialTransaction' => 'applications/differential/storage/DifferentialTransaction.php',
     'DifferentialTransactionComment' => 'applications/differential/storage/DifferentialTransactionComment.php',
     'DifferentialUnitFieldSpecification' => 'applications/differential/field/specification/DifferentialUnitFieldSpecification.php',
     'DifferentialUnitStatus' => 'applications/differential/constants/DifferentialUnitStatus.php',
     'DifferentialUnitTestResult' => 'applications/differential/constants/DifferentialUnitTestResult.php',
     'DifferentialViewPolicyFieldSpecification' => 'applications/differential/field/specification/DifferentialViewPolicyFieldSpecification.php',
     'DiffusionBranchInformation' => 'applications/diffusion/data/DiffusionBranchInformation.php',
     'DiffusionBranchTableController' => 'applications/diffusion/controller/DiffusionBranchTableController.php',
     'DiffusionBranchTableView' => 'applications/diffusion/view/DiffusionBranchTableView.php',
     'DiffusionBrowseController' => 'applications/diffusion/controller/DiffusionBrowseController.php',
     'DiffusionBrowseFileController' => 'applications/diffusion/controller/DiffusionBrowseFileController.php',
     'DiffusionBrowseResultSet' => 'applications/diffusion/data/DiffusionBrowseResultSet.php',
     'DiffusionBrowseTableView' => 'applications/diffusion/view/DiffusionBrowseTableView.php',
     'DiffusionChangeController' => 'applications/diffusion/controller/DiffusionChangeController.php',
     'DiffusionCommentListView' => 'applications/diffusion/view/DiffusionCommentListView.php',
     'DiffusionCommentView' => 'applications/diffusion/view/DiffusionCommentView.php',
     'DiffusionCommitBranchesController' => 'applications/diffusion/controller/DiffusionCommitBranchesController.php',
     'DiffusionCommitChangeTableView' => 'applications/diffusion/view/DiffusionCommitChangeTableView.php',
     'DiffusionCommitController' => 'applications/diffusion/controller/DiffusionCommitController.php',
     'DiffusionCommitEditController' => 'applications/diffusion/controller/DiffusionCommitEditController.php',
     'DiffusionCommitParentsQuery' => 'applications/diffusion/query/parents/DiffusionCommitParentsQuery.php',
     'DiffusionCommitQuery' => 'applications/diffusion/query/DiffusionCommitQuery.php',
     'DiffusionCommitTagsController' => 'applications/diffusion/controller/DiffusionCommitTagsController.php',
     'DiffusionController' => 'applications/diffusion/controller/DiffusionController.php',
     'DiffusionDiffController' => 'applications/diffusion/controller/DiffusionDiffController.php',
     'DiffusionDoorkeeperCommitFeedStoryPublisher' => 'applications/diffusion/doorkeeper/DiffusionDoorkeeperCommitFeedStoryPublisher.php',
     'DiffusionEmptyResultView' => 'applications/diffusion/view/DiffusionEmptyResultView.php',
     'DiffusionExpandCommitQueryException' => 'applications/diffusion/exception/DiffusionExpandCommitQueryException.php',
     'DiffusionExpandShortNameQuery' => 'applications/diffusion/query/expandshortname/DiffusionExpandShortNameQuery.php',
     'DiffusionExternalController' => 'applications/diffusion/controller/DiffusionExternalController.php',
     'DiffusionFileContent' => 'applications/diffusion/data/DiffusionFileContent.php',
     'DiffusionFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionFileContentQuery.php',
     'DiffusionGitBranch' => 'applications/diffusion/data/DiffusionGitBranch.php',
     'DiffusionGitBranchTestCase' => 'applications/diffusion/data/__tests__/DiffusionGitBranchTestCase.php',
     'DiffusionGitCommitParentsQuery' => 'applications/diffusion/query/parents/DiffusionGitCommitParentsQuery.php',
     'DiffusionGitExpandShortNameQuery' => 'applications/diffusion/query/expandshortname/DiffusionGitExpandShortNameQuery.php',
     'DiffusionGitFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionGitFileContentQuery.php',
     'DiffusionGitRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionGitRawDiffQuery.php',
     'DiffusionGitRequest' => 'applications/diffusion/request/DiffusionGitRequest.php',
     'DiffusionGitStableCommitNameQuery' => 'applications/diffusion/query/stablecommitname/DiffusionGitStableCommitNameQuery.php',
     'DiffusionHistoryController' => 'applications/diffusion/controller/DiffusionHistoryController.php',
     'DiffusionHistoryTableView' => 'applications/diffusion/view/DiffusionHistoryTableView.php',
     'DiffusionHomeController' => 'applications/diffusion/controller/DiffusionHomeController.php',
     'DiffusionHovercardEventListener' => 'applications/diffusion/events/DiffusionHovercardEventListener.php',
     'DiffusionInlineCommentController' => 'applications/diffusion/controller/DiffusionInlineCommentController.php',
     'DiffusionInlineCommentPreviewController' => 'applications/diffusion/controller/DiffusionInlineCommentPreviewController.php',
     'DiffusionLastModifiedController' => 'applications/diffusion/controller/DiffusionLastModifiedController.php',
     'DiffusionLintController' => 'applications/diffusion/controller/DiffusionLintController.php',
     'DiffusionLintDetailsController' => 'applications/diffusion/controller/DiffusionLintDetailsController.php',
     'DiffusionLintSaveRunner' => 'applications/diffusion/DiffusionLintSaveRunner.php',
     'DiffusionMercurialCommitParentsQuery' => 'applications/diffusion/query/parents/DiffusionMercurialCommitParentsQuery.php',
     'DiffusionMercurialExpandShortNameQuery' => 'applications/diffusion/query/expandshortname/DiffusionMercurialExpandShortNameQuery.php',
     'DiffusionMercurialFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionMercurialFileContentQuery.php',
     'DiffusionMercurialRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionMercurialRawDiffQuery.php',
     'DiffusionMercurialRequest' => 'applications/diffusion/request/DiffusionMercurialRequest.php',
     'DiffusionMercurialStableCommitNameQuery' => 'applications/diffusion/query/stablecommitname/DiffusionMercurialStableCommitNameQuery.php',
     'DiffusionPathChange' => 'applications/diffusion/data/DiffusionPathChange.php',
     'DiffusionPathChangeQuery' => 'applications/diffusion/query/pathchange/DiffusionPathChangeQuery.php',
     'DiffusionPathCompleteController' => 'applications/diffusion/controller/DiffusionPathCompleteController.php',
     'DiffusionPathIDQuery' => 'applications/diffusion/query/pathid/DiffusionPathIDQuery.php',
     'DiffusionPathQuery' => 'applications/diffusion/query/DiffusionPathQuery.php',
     'DiffusionPathQueryTestCase' => 'applications/diffusion/query/pathid/__tests__/DiffusionPathQueryTestCase.php',
     'DiffusionPathValidateController' => 'applications/diffusion/controller/DiffusionPathValidateController.php',
     'DiffusionQuery' => 'applications/diffusion/query/DiffusionQuery.php',
     'DiffusionRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionRawDiffQuery.php',
     'DiffusionRemarkupRule' => 'applications/diffusion/remarkup/DiffusionRemarkupRule.php',
     'DiffusionRenameHistoryQuery' => 'applications/diffusion/query/DiffusionRenameHistoryQuery.php',
     'DiffusionRepositoryController' => 'applications/diffusion/controller/DiffusionRepositoryController.php',
     'DiffusionRepositoryCreateController' => 'applications/diffusion/controller/DiffusionRepositoryCreateController.php',
     'DiffusionRepositoryEditBasicController' => 'applications/diffusion/controller/DiffusionRepositoryEditBasicController.php',
     'DiffusionRepositoryEditController' => 'applications/diffusion/controller/DiffusionRepositoryEditController.php',
     'DiffusionRepositoryEditEncodingController' => 'applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php',
     'DiffusionRepositoryPath' => 'applications/diffusion/data/DiffusionRepositoryPath.php',
     'DiffusionRepositoryTag' => 'applications/diffusion/data/DiffusionRepositoryTag.php',
     'DiffusionRequest' => 'applications/diffusion/request/DiffusionRequest.php',
     'DiffusionSetupException' => 'applications/diffusion/exception/DiffusionSetupException.php',
     'DiffusionStableCommitNameQuery' => 'applications/diffusion/query/stablecommitname/DiffusionStableCommitNameQuery.php',
     'DiffusionSvnCommitParentsQuery' => 'applications/diffusion/query/parents/DiffusionSvnCommitParentsQuery.php',
     'DiffusionSvnFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionSvnFileContentQuery.php',
     'DiffusionSvnRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionSvnRawDiffQuery.php',
     'DiffusionSvnRequest' => 'applications/diffusion/request/DiffusionSvnRequest.php',
     'DiffusionSvnStableCommitNameQuery' => 'applications/diffusion/query/stablecommitname/DiffusionSvnStableCommitNameQuery.php',
     'DiffusionSymbolController' => 'applications/diffusion/controller/DiffusionSymbolController.php',
     'DiffusionSymbolQuery' => 'applications/diffusion/query/DiffusionSymbolQuery.php',
     'DiffusionTagListController' => 'applications/diffusion/controller/DiffusionTagListController.php',
     'DiffusionTagListView' => 'applications/diffusion/view/DiffusionTagListView.php',
     'DiffusionURITestCase' => 'applications/diffusion/request/__tests__/DiffusionURITestCase.php',
     'DiffusionView' => 'applications/diffusion/view/DiffusionView.php',
     'DivinerArticleAtomizer' => 'applications/diviner/atomizer/DivinerArticleAtomizer.php',
     'DivinerAtom' => 'applications/diviner/atom/DivinerAtom.php',
     'DivinerAtomCache' => 'applications/diviner/cache/DivinerAtomCache.php',
     'DivinerAtomController' => 'applications/diviner/controller/DivinerAtomController.php',
     'DivinerAtomListController' => 'applications/diviner/controller/DivinerAtomListController.php',
     'DivinerAtomQuery' => 'applications/diviner/query/DivinerAtomQuery.php',
     'DivinerAtomRef' => 'applications/diviner/atom/DivinerAtomRef.php',
     'DivinerAtomSearchEngine' => 'applications/diviner/query/DivinerAtomSearchEngine.php',
     'DivinerAtomizeWorkflow' => 'applications/diviner/workflow/DivinerAtomizeWorkflow.php',
     'DivinerAtomizer' => 'applications/diviner/atomizer/DivinerAtomizer.php',
     'DivinerBookController' => 'applications/diviner/controller/DivinerBookController.php',
     'DivinerBookQuery' => 'applications/diviner/query/DivinerBookQuery.php',
     'DivinerController' => 'applications/diviner/controller/DivinerController.php',
     'DivinerDAO' => 'applications/diviner/storage/DivinerDAO.php',
     'DivinerDefaultRenderer' => 'applications/diviner/renderer/DivinerDefaultRenderer.php',
     'DivinerDiskCache' => 'applications/diviner/cache/DivinerDiskCache.php',
     'DivinerFileAtomizer' => 'applications/diviner/atomizer/DivinerFileAtomizer.php',
     'DivinerFindController' => 'applications/diviner/controller/DivinerFindController.php',
     'DivinerGenerateWorkflow' => 'applications/diviner/workflow/DivinerGenerateWorkflow.php',
     'DivinerLegacyController' => 'applications/diviner/controller/DivinerLegacyController.php',
     'DivinerLiveAtom' => 'applications/diviner/storage/DivinerLiveAtom.php',
     'DivinerLiveBook' => 'applications/diviner/storage/DivinerLiveBook.php',
     'DivinerLivePublisher' => 'applications/diviner/publisher/DivinerLivePublisher.php',
     'DivinerLiveSymbol' => 'applications/diviner/storage/DivinerLiveSymbol.php',
     'DivinerPHIDTypeAtom' => 'applications/diviner/phid/DivinerPHIDTypeAtom.php',
     'DivinerPHIDTypeBook' => 'applications/diviner/phid/DivinerPHIDTypeBook.php',
     'DivinerPublishCache' => 'applications/diviner/cache/DivinerPublishCache.php',
     'DivinerPublisher' => 'applications/diviner/publisher/DivinerPublisher.php',
     'DivinerRemarkupRuleSymbol' => 'applications/diviner/markup/DivinerRemarkupRuleSymbol.php',
     'DivinerRenderer' => 'applications/diviner/renderer/DivinerRenderer.php',
     'DivinerStaticPublisher' => 'applications/diviner/publisher/DivinerStaticPublisher.php',
     'DivinerWorkflow' => 'applications/diviner/workflow/DivinerWorkflow.php',
     'DoorkeeperBridge' => 'applications/doorkeeper/bridge/DoorkeeperBridge.php',
     'DoorkeeperBridgeAsana' => 'applications/doorkeeper/bridge/DoorkeeperBridgeAsana.php',
     'DoorkeeperDAO' => 'applications/doorkeeper/storage/DoorkeeperDAO.php',
     'DoorkeeperExternalObject' => 'applications/doorkeeper/storage/DoorkeeperExternalObject.php',
     'DoorkeeperExternalObjectQuery' => 'applications/doorkeeper/query/DoorkeeperExternalObjectQuery.php',
     'DoorkeeperFeedStoryPublisher' => 'applications/doorkeeper/engine/DoorkeeperFeedStoryPublisher.php',
     'DoorkeeperFeedWorkerAsana' => 'applications/doorkeeper/worker/DoorkeeperFeedWorkerAsana.php',
     'DoorkeeperImportEngine' => 'applications/doorkeeper/engine/DoorkeeperImportEngine.php',
     'DoorkeeperObjectRef' => 'applications/doorkeeper/engine/DoorkeeperObjectRef.php',
     'DoorkeeperRemarkupRuleAsana' => 'applications/doorkeeper/remarkup/DoorkeeperRemarkupRuleAsana.php',
     'DoorkeeperTagsController' => 'applications/doorkeeper/controller/DoorkeeperTagsController.php',
     'DrydockAllocatorWorker' => 'applications/drydock/worker/DrydockAllocatorWorker.php',
     'DrydockApacheWebrootInterface' => 'applications/drydock/interface/webroot/DrydockApacheWebrootInterface.php',
     'DrydockBlueprint' => 'applications/drydock/blueprint/DrydockBlueprint.php',
     'DrydockBlueprintScopeGuard' => 'applications/drydock/util/DrydockBlueprintScopeGuard.php',
     'DrydockCommandInterface' => 'applications/drydock/interface/command/DrydockCommandInterface.php',
     'DrydockConstants' => 'applications/drydock/constants/DrydockConstants.php',
     'DrydockController' => 'applications/drydock/controller/DrydockController.php',
     'DrydockDAO' => 'applications/drydock/storage/DrydockDAO.php',
     'DrydockInterface' => 'applications/drydock/interface/DrydockInterface.php',
     'DrydockLease' => 'applications/drydock/storage/DrydockLease.php',
     'DrydockLeaseListController' => 'applications/drydock/controller/DrydockLeaseListController.php',
     'DrydockLeaseQuery' => 'applications/drydock/query/DrydockLeaseQuery.php',
     'DrydockLeaseReleaseController' => 'applications/drydock/controller/DrydockLeaseReleaseController.php',
     'DrydockLeaseStatus' => 'applications/drydock/constants/DrydockLeaseStatus.php',
     'DrydockLeaseViewController' => 'applications/drydock/controller/DrydockLeaseViewController.php',
     'DrydockLocalCommandInterface' => 'applications/drydock/interface/command/DrydockLocalCommandInterface.php',
     'DrydockLocalHostBlueprint' => 'applications/drydock/blueprint/DrydockLocalHostBlueprint.php',
     'DrydockLog' => 'applications/drydock/storage/DrydockLog.php',
     'DrydockLogController' => 'applications/drydock/controller/DrydockLogController.php',
     'DrydockLogQuery' => 'applications/drydock/query/DrydockLogQuery.php',
     'DrydockManagementCloseWorkflow' => 'applications/drydock/management/DrydockManagementCloseWorkflow.php',
     'DrydockManagementLeaseWorkflow' => 'applications/drydock/management/DrydockManagementLeaseWorkflow.php',
     'DrydockManagementReleaseWorkflow' => 'applications/drydock/management/DrydockManagementReleaseWorkflow.php',
     'DrydockManagementWaitForLeaseWorkflow' => 'applications/drydock/management/DrydockManagementWaitForLeaseWorkflow.php',
     'DrydockManagementWorkflow' => 'applications/drydock/management/DrydockManagementWorkflow.php',
     'DrydockResource' => 'applications/drydock/storage/DrydockResource.php',
     'DrydockResourceCloseController' => 'applications/drydock/controller/DrydockResourceCloseController.php',
     'DrydockResourceListController' => 'applications/drydock/controller/DrydockResourceListController.php',
     'DrydockResourceQuery' => 'applications/drydock/query/DrydockResourceQuery.php',
     'DrydockResourceStatus' => 'applications/drydock/constants/DrydockResourceStatus.php',
     'DrydockResourceViewController' => 'applications/drydock/controller/DrydockResourceViewController.php',
     'DrydockSSHCommandInterface' => 'applications/drydock/interface/command/DrydockSSHCommandInterface.php',
     'DrydockWebrootInterface' => 'applications/drydock/interface/webroot/DrydockWebrootInterface.php',
     'DrydockWorkingCopyBlueprint' => 'applications/drydock/blueprint/DrydockWorkingCopyBlueprint.php',
     'FeedPublisherHTTPWorker' => 'applications/feed/worker/FeedPublisherHTTPWorker.php',
     'FeedPublisherWorker' => 'applications/feed/worker/FeedPublisherWorker.php',
     'FeedPushWorker' => 'applications/feed/worker/FeedPushWorker.php',
     'FilesCreateMailReceiver' => 'applications/files/mail/FilesCreateMailReceiver.php',
     'HarbormasterDAO' => 'applications/harbormaster/storage/HarbormasterDAO.php',
     'HarbormasterObject' => 'applications/harbormaster/storage/HarbormasterObject.php',
     'HarbormasterRunnerWorker' => 'applications/harbormaster/worker/HarbormasterRunnerWorker.php',
     'HarbormasterScratchTable' => 'applications/harbormaster/storage/HarbormasterScratchTable.php',
     'HeraldAction' => 'applications/herald/storage/HeraldAction.php',
     'HeraldAdapter' => 'applications/herald/adapter/HeraldAdapter.php',
     'HeraldApplyTranscript' => 'applications/herald/storage/transcript/HeraldApplyTranscript.php',
     'HeraldCommitAdapter' => 'applications/herald/adapter/HeraldCommitAdapter.php',
     'HeraldCondition' => 'applications/herald/storage/HeraldCondition.php',
     'HeraldConditionTranscript' => 'applications/herald/storage/transcript/HeraldConditionTranscript.php',
     'HeraldController' => 'applications/herald/controller/HeraldController.php',
     'HeraldDAO' => 'applications/herald/storage/HeraldDAO.php',
     'HeraldDeleteController' => 'applications/herald/controller/HeraldDeleteController.php',
     'HeraldDifferentialRevisionAdapter' => 'applications/herald/adapter/HeraldDifferentialRevisionAdapter.php',
     'HeraldEditLogQuery' => 'applications/herald/query/HeraldEditLogQuery.php',
     'HeraldEffect' => 'applications/herald/engine/HeraldEffect.php',
     'HeraldEngine' => 'applications/herald/engine/HeraldEngine.php',
     'HeraldInvalidActionException' => 'applications/herald/engine/exception/HeraldInvalidActionException.php',
     'HeraldInvalidConditionException' => 'applications/herald/engine/exception/HeraldInvalidConditionException.php',
     'HeraldInvalidFieldException' => 'applications/herald/engine/exception/HeraldInvalidFieldException.php',
     'HeraldNewController' => 'applications/herald/controller/HeraldNewController.php',
     'HeraldObjectTranscript' => 'applications/herald/storage/transcript/HeraldObjectTranscript.php',
     'HeraldPHIDTypeRule' => 'applications/herald/phid/HeraldPHIDTypeRule.php',
     'HeraldPholioMockAdapter' => 'applications/herald/adapter/HeraldPholioMockAdapter.php',
     'HeraldRecursiveConditionsException' => 'applications/herald/engine/exception/HeraldRecursiveConditionsException.php',
     'HeraldRepetitionPolicyConfig' => 'applications/herald/config/HeraldRepetitionPolicyConfig.php',
     'HeraldRule' => 'applications/herald/storage/HeraldRule.php',
     'HeraldRuleController' => 'applications/herald/controller/HeraldRuleController.php',
     'HeraldRuleEdit' => 'applications/herald/storage/HeraldRuleEdit.php',
     'HeraldRuleEditHistoryController' => 'applications/herald/controller/HeraldRuleEditHistoryController.php',
     'HeraldRuleEditHistoryView' => 'applications/herald/view/HeraldRuleEditHistoryView.php',
     'HeraldRuleListController' => 'applications/herald/controller/HeraldRuleListController.php',
     'HeraldRuleQuery' => 'applications/herald/query/HeraldRuleQuery.php',
     'HeraldRuleSearchEngine' => 'applications/herald/query/HeraldRuleSearchEngine.php',
     'HeraldRuleTransaction' => 'applications/herald/storage/HeraldRuleTransaction.php',
     'HeraldRuleTransactionComment' => 'applications/herald/storage/HeraldRuleTransactionComment.php',
     'HeraldRuleTranscript' => 'applications/herald/storage/transcript/HeraldRuleTranscript.php',
     'HeraldRuleTypeConfig' => 'applications/herald/config/HeraldRuleTypeConfig.php',
     'HeraldRuleViewController' => 'applications/herald/controller/HeraldRuleViewController.php',
     'HeraldTestConsoleController' => 'applications/herald/controller/HeraldTestConsoleController.php',
     'HeraldTranscript' => 'applications/herald/storage/transcript/HeraldTranscript.php',
     'HeraldTranscriptController' => 'applications/herald/controller/HeraldTranscriptController.php',
     'HeraldTranscriptListController' => 'applications/herald/controller/HeraldTranscriptListController.php',
     'Javelin' => 'infrastructure/javelin/Javelin.php',
     'JavelinReactorExample' => 'applications/uiexample/examples/JavelinReactorExample.php',
     'JavelinUIExample' => 'applications/uiexample/examples/JavelinUIExample.php',
     'JavelinViewExample' => 'applications/uiexample/examples/JavelinViewExample.php',
     'JavelinViewExampleServerView' => 'applications/uiexample/examples/JavelinViewExampleServerView.php',
     'LegalpadConstants' => 'applications/legalpad/constants/LegalpadConstants.php',
     'LegalpadController' => 'applications/legalpad/controller/LegalpadController.php',
     'LegalpadDAO' => 'applications/legalpad/storage/LegalpadDAO.php',
     'LegalpadDocument' => 'applications/legalpad/storage/LegalpadDocument.php',
     'LegalpadDocumentBody' => 'applications/legalpad/storage/LegalpadDocumentBody.php',
     'LegalpadDocumentCommentController' => 'applications/legalpad/controller/LegalpadDocumentCommentController.php',
     'LegalpadDocumentEditController' => 'applications/legalpad/controller/LegalpadDocumentEditController.php',
     'LegalpadDocumentEditor' => 'applications/legalpad/editor/LegalpadDocumentEditor.php',
     'LegalpadDocumentListController' => 'applications/legalpad/controller/LegalpadDocumentListController.php',
     'LegalpadDocumentQuery' => 'applications/legalpad/query/LegalpadDocumentQuery.php',
     'LegalpadDocumentSearchEngine' => 'applications/legalpad/query/LegalpadDocumentSearchEngine.php',
     'LegalpadDocumentSignController' => 'applications/legalpad/controller/LegalpadDocumentSignController.php',
     'LegalpadDocumentSignature' => 'applications/legalpad/storage/LegalpadDocumentSignature.php',
     'LegalpadDocumentViewController' => 'applications/legalpad/controller/LegalpadDocumentViewController.php',
     'LegalpadMockMailReceiver' => 'applications/legalpad/mail/LegalpadMockMailReceiver.php',
     'LegalpadReplyHandler' => 'applications/legalpad/mail/LegalpadReplyHandler.php',
     'LegalpadTransaction' => 'applications/legalpad/storage/LegalpadTransaction.php',
     'LegalpadTransactionComment' => 'applications/legalpad/storage/LegalpadTransactionComment.php',
     'LegalpadTransactionQuery' => 'applications/legalpad/query/LegalpadTransactionQuery.php',
     'LegalpadTransactionType' => 'applications/legalpad/constants/LegalpadTransactionType.php',
     'LegalpadTransactionView' => 'applications/legalpad/view/LegalpadTransactionView.php',
     'LiskChunkTestCase' => 'infrastructure/storage/lisk/__tests__/LiskChunkTestCase.php',
     'LiskDAO' => 'infrastructure/storage/lisk/LiskDAO.php',
     'LiskDAOSet' => 'infrastructure/storage/lisk/LiskDAOSet.php',
     'LiskDAOTestCase' => 'infrastructure/storage/lisk/__tests__/LiskDAOTestCase.php',
     'LiskEphemeralObjectException' => 'infrastructure/storage/lisk/LiskEphemeralObjectException.php',
     'LiskFixtureTestCase' => 'infrastructure/storage/lisk/__tests__/LiskFixtureTestCase.php',
     'LiskIsolationTestCase' => 'infrastructure/storage/lisk/__tests__/LiskIsolationTestCase.php',
     'LiskIsolationTestDAO' => 'infrastructure/storage/lisk/__tests__/LiskIsolationTestDAO.php',
     'LiskIsolationTestDAOException' => 'infrastructure/storage/lisk/__tests__/LiskIsolationTestDAOException.php',
     'LiskMigrationIterator' => 'infrastructure/storage/lisk/LiskMigrationIterator.php',
     'LiskRawMigrationIterator' => 'infrastructure/storage/lisk/LiskRawMigrationIterator.php',
     'ManiphestAction' => 'applications/maniphest/constants/ManiphestAction.php',
     'ManiphestAuxiliaryFieldDefaultSpecification' => 'applications/maniphest/auxiliaryfield/ManiphestAuxiliaryFieldDefaultSpecification.php',
     'ManiphestAuxiliaryFieldSpecification' => 'applications/maniphest/auxiliaryfield/ManiphestAuxiliaryFieldSpecification.php',
     'ManiphestAuxiliaryFieldTypeException' => 'applications/maniphest/auxiliaryfield/ManiphestAuxiliaryFieldTypeException.php',
     'ManiphestAuxiliaryFieldValidationException' => 'applications/maniphest/auxiliaryfield/ManiphestAuxiliaryFieldValidationException.php',
     'ManiphestBatchEditController' => 'applications/maniphest/controller/ManiphestBatchEditController.php',
     'ManiphestConstants' => 'applications/maniphest/constants/ManiphestConstants.php',
     'ManiphestController' => 'applications/maniphest/controller/ManiphestController.php',
     'ManiphestCreateMailReceiver' => 'applications/maniphest/mail/ManiphestCreateMailReceiver.php',
     'ManiphestDAO' => 'applications/maniphest/storage/ManiphestDAO.php',
     'ManiphestDefaultTaskExtensions' => 'applications/maniphest/extensions/ManiphestDefaultTaskExtensions.php',
     'ManiphestEdgeEventListener' => 'applications/maniphest/event/ManiphestEdgeEventListener.php',
     'ManiphestExcelDefaultFormat' => 'applications/maniphest/export/ManiphestExcelDefaultFormat.php',
     'ManiphestExcelFormat' => 'applications/maniphest/export/ManiphestExcelFormat.php',
     'ManiphestExportController' => 'applications/maniphest/controller/ManiphestExportController.php',
     'ManiphestHovercardEventListener' => 'applications/maniphest/event/ManiphestHovercardEventListener.php',
     'ManiphestPHIDTypeTask' => 'applications/maniphest/phid/ManiphestPHIDTypeTask.php',
     'ManiphestPeopleMenuEventListener' => 'applications/maniphest/event/ManiphestPeopleMenuEventListener.php',
     'ManiphestRemarkupRule' => 'applications/maniphest/remarkup/ManiphestRemarkupRule.php',
     'ManiphestReplyHandler' => 'applications/maniphest/mail/ManiphestReplyHandler.php',
     'ManiphestReportController' => 'applications/maniphest/controller/ManiphestReportController.php',
     'ManiphestSavedQuery' => 'applications/maniphest/storage/ManiphestSavedQuery.php',
     'ManiphestSavedQueryDeleteController' => 'applications/maniphest/controller/ManiphestSavedQueryDeleteController.php',
     'ManiphestSavedQueryEditController' => 'applications/maniphest/controller/ManiphestSavedQueryEditController.php',
     'ManiphestSavedQueryListController' => 'applications/maniphest/controller/ManiphestSavedQueryListController.php',
     'ManiphestSearchIndexer' => 'applications/maniphest/search/ManiphestSearchIndexer.php',
     'ManiphestSubpriorityController' => 'applications/maniphest/controller/ManiphestSubpriorityController.php',
     'ManiphestSubscribeController' => 'applications/maniphest/controller/ManiphestSubscribeController.php',
     'ManiphestTask' => 'applications/maniphest/storage/ManiphestTask.php',
     'ManiphestTaskAuxiliaryStorage' => 'applications/maniphest/storage/ManiphestTaskAuxiliaryStorage.php',
     'ManiphestTaskDescriptionChangeController' => 'applications/maniphest/controller/ManiphestTaskDescriptionChangeController.php',
     'ManiphestTaskDescriptionPreviewController' => 'applications/maniphest/controller/ManiphestTaskDescriptionPreviewController.php',
     'ManiphestTaskDetailController' => 'applications/maniphest/controller/ManiphestTaskDetailController.php',
     'ManiphestTaskEditController' => 'applications/maniphest/controller/ManiphestTaskEditController.php',
     'ManiphestTaskExtensions' => 'applications/maniphest/extensions/ManiphestTaskExtensions.php',
     'ManiphestTaskListController' => 'applications/maniphest/controller/ManiphestTaskListController.php',
     'ManiphestTaskListView' => 'applications/maniphest/view/ManiphestTaskListView.php',
     'ManiphestTaskMailReceiver' => 'applications/maniphest/mail/ManiphestTaskMailReceiver.php',
     'ManiphestTaskOwner' => 'applications/maniphest/constants/ManiphestTaskOwner.php',
     'ManiphestTaskPriority' => 'applications/maniphest/constants/ManiphestTaskPriority.php',
     'ManiphestTaskProject' => 'applications/maniphest/storage/ManiphestTaskProject.php',
     'ManiphestTaskProjectsView' => 'applications/maniphest/view/ManiphestTaskProjectsView.php',
     'ManiphestTaskQuery' => 'applications/maniphest/ManiphestTaskQuery.php',
     'ManiphestTaskStatus' => 'applications/maniphest/constants/ManiphestTaskStatus.php',
     'ManiphestTaskSubscriber' => 'applications/maniphest/storage/ManiphestTaskSubscriber.php',
     'ManiphestTransaction' => 'applications/maniphest/storage/ManiphestTransaction.php',
     'ManiphestTransactionDetailView' => 'applications/maniphest/view/ManiphestTransactionDetailView.php',
     'ManiphestTransactionEditor' => 'applications/maniphest/editor/ManiphestTransactionEditor.php',
     'ManiphestTransactionListView' => 'applications/maniphest/view/ManiphestTransactionListView.php',
     'ManiphestTransactionPreviewController' => 'applications/maniphest/controller/ManiphestTransactionPreviewController.php',
     'ManiphestTransactionSaveController' => 'applications/maniphest/controller/ManiphestTransactionSaveController.php',
     'ManiphestTransactionType' => 'applications/maniphest/constants/ManiphestTransactionType.php',
     'ManiphestView' => 'applications/maniphest/view/ManiphestView.php',
     'MetaMTAConstants' => 'applications/metamta/constants/MetaMTAConstants.php',
     'MetaMTANotificationType' => 'applications/metamta/constants/MetaMTANotificationType.php',
     'MetaMTAReceivedMailStatus' => 'applications/metamta/constants/MetaMTAReceivedMailStatus.php',
     'OwnersPackageReplyHandler' => 'applications/owners/mail/OwnersPackageReplyHandler.php',
     'PHUI' => 'view/phui/PHUI.php',
     'PHUIBoxExample' => 'applications/uiexample/examples/PHUIBoxExample.php',
     'PHUIBoxView' => 'view/phui/PHUIBoxView.php',
     'PHUIButtonExample' => 'applications/uiexample/examples/PHUIButtonExample.php',
     'PHUIButtonView' => 'view/phui/PHUIButtonView.php',
     'PHUIColorPalletteExample' => 'applications/uiexample/examples/PHUIColorPalletteExample.php',
     'PHUIDocumentExample' => 'applications/uiexample/examples/PHUIDocumentExample.php',
     'PHUIDocumentView' => 'view/phui/PHUIDocumentView.php',
     'PHUIFeedStoryExample' => 'applications/uiexample/examples/PHUIFeedStoryExample.php',
     'PHUIFeedStoryView' => 'view/phui/PHUIFeedStoryView.php',
+    'PHUIFormBoxView' => 'view/form/PHUIFormBoxView.php',
     'PHUIFormDividerControl' => 'view/form/control/PHUIFormDividerControl.php',
     'PHUIFormFreeformDateControl' => 'view/form/control/PHUIFormFreeformDateControl.php',
+    'PHUIFormLayoutView' => 'view/form/PHUIFormLayoutView.php',
     'PHUIFormMultiSubmitControl' => 'view/form/control/PHUIFormMultiSubmitControl.php',
     'PHUIFormPageView' => 'view/form/PHUIFormPageView.php',
     'PHUIIconExample' => 'applications/uiexample/examples/PHUIIconExample.php',
     'PHUIIconView' => 'view/phui/PHUIIconView.php',
     'PHUIListExample' => 'applications/uiexample/examples/PHUIListExample.php',
     'PHUIListItemView' => 'view/phui/PHUIListItemView.php',
     'PHUIListView' => 'view/phui/PHUIListView.php',
     'PHUIListViewTestCase' => 'view/layout/__tests__/PHUIListViewTestCase.php',
     'PHUIPagedFormView' => 'view/form/PHUIPagedFormView.php',
     'PHUIPinboardItemView' => 'view/phui/PHUIPinboardItemView.php',
     'PHUIPinboardView' => 'view/phui/PHUIPinboardView.php',
     'PHUIRemarkupPreviewPanel' => 'view/phui/PHUIRemarkupPreviewPanel.php',
     'PHUIStatusItemView' => 'view/phui/PHUIStatusItemView.php',
     'PHUIStatusListView' => 'view/phui/PHUIStatusListView.php',
     'PHUITextExample' => 'applications/uiexample/examples/PHUITextExample.php',
     'PHUITextView' => 'view/phui/PHUITextView.php',
     'PackageCreateMail' => 'applications/owners/mail/PackageCreateMail.php',
     'PackageDeleteMail' => 'applications/owners/mail/PackageDeleteMail.php',
     'PackageMail' => 'applications/owners/mail/PackageMail.php',
     'PackageModifyMail' => 'applications/owners/mail/PackageModifyMail.php',
     'PasteCreateMailReceiver' => 'applications/paste/mail/PasteCreateMailReceiver.php',
     'PasteEmbedView' => 'applications/paste/view/PasteEmbedView.php',
     'PasteMockMailReceiver' => 'applications/paste/mail/PasteMockMailReceiver.php',
     'PasteReplyHandler' => 'applications/paste/mail/PasteReplyHandler.php',
     'Phabricator404Controller' => 'applications/base/controller/Phabricator404Controller.php',
     'PhabricatorAWSConfigOptions' => 'applications/config/option/PhabricatorAWSConfigOptions.php',
     'PhabricatorAccessLog' => 'infrastructure/PhabricatorAccessLog.php',
     'PhabricatorAccessLogConfigOptions' => 'applications/config/option/PhabricatorAccessLogConfigOptions.php',
     'PhabricatorActionHeaderExample' => 'applications/uiexample/examples/PhabricatorActionHeaderExample.php',
     'PhabricatorActionHeaderView' => 'view/layout/PhabricatorActionHeaderView.php',
     'PhabricatorActionListExample' => 'applications/uiexample/examples/PhabricatorActionListExample.php',
     'PhabricatorActionListView' => 'view/layout/PhabricatorActionListView.php',
     'PhabricatorActionView' => 'view/layout/PhabricatorActionView.php',
     'PhabricatorAllCapsTranslation' => 'infrastructure/internationalization/PhabricatorAllCapsTranslation.php',
     'PhabricatorAnchorView' => 'view/layout/PhabricatorAnchorView.php',
     'PhabricatorAphrontBarExample' => 'applications/uiexample/examples/PhabricatorAphrontBarExample.php',
     'PhabricatorAphrontViewTestCase' => 'view/__tests__/PhabricatorAphrontViewTestCase.php',
     'PhabricatorApplication' => 'applications/base/PhabricatorApplication.php',
     'PhabricatorApplicationApplications' => 'applications/meta/application/PhabricatorApplicationApplications.php',
     'PhabricatorApplicationAudit' => 'applications/audit/application/PhabricatorApplicationAudit.php',
     'PhabricatorApplicationAuth' => 'applications/auth/application/PhabricatorApplicationAuth.php',
     'PhabricatorApplicationCalendar' => 'applications/calendar/application/PhabricatorApplicationCalendar.php',
     'PhabricatorApplicationChatLog' => 'applications/chatlog/applications/PhabricatorApplicationChatLog.php',
     'PhabricatorApplicationConduit' => 'applications/conduit/application/PhabricatorApplicationConduit.php',
     'PhabricatorApplicationConfig' => 'applications/config/application/PhabricatorApplicationConfig.php',
     'PhabricatorApplicationConfigOptions' => 'applications/config/option/PhabricatorApplicationConfigOptions.php',
     'PhabricatorApplicationConpherence' => 'applications/conpherence/application/PhabricatorApplicationConpherence.php',
     'PhabricatorApplicationCountdown' => 'applications/countdown/application/PhabricatorApplicationCountdown.php',
     'PhabricatorApplicationDaemons' => 'applications/daemon/application/PhabricatorApplicationDaemons.php',
     'PhabricatorApplicationDetailViewController' => 'applications/meta/controller/PhabricatorApplicationDetailViewController.php',
     'PhabricatorApplicationDifferential' => 'applications/differential/application/PhabricatorApplicationDifferential.php',
     'PhabricatorApplicationDiffusion' => 'applications/diffusion/application/PhabricatorApplicationDiffusion.php',
     'PhabricatorApplicationDiviner' => 'applications/diviner/application/PhabricatorApplicationDiviner.php',
     'PhabricatorApplicationDoorkeeper' => 'applications/doorkeeper/application/PhabricatorApplicationDoorkeeper.php',
     'PhabricatorApplicationDrydock' => 'applications/drydock/application/PhabricatorApplicationDrydock.php',
     'PhabricatorApplicationFact' => 'applications/fact/application/PhabricatorApplicationFact.php',
     'PhabricatorApplicationFeed' => 'applications/feed/application/PhabricatorApplicationFeed.php',
     'PhabricatorApplicationFiles' => 'applications/files/application/PhabricatorApplicationFiles.php',
     'PhabricatorApplicationFlags' => 'applications/flag/application/PhabricatorApplicationFlags.php',
     'PhabricatorApplicationHerald' => 'applications/herald/application/PhabricatorApplicationHerald.php',
     'PhabricatorApplicationLaunchView' => 'applications/meta/view/PhabricatorApplicationLaunchView.php',
     'PhabricatorApplicationLegalpad' => 'applications/legalpad/application/PhabricatorApplicationLegalpad.php',
     'PhabricatorApplicationMacro' => 'applications/macro/application/PhabricatorApplicationMacro.php',
     'PhabricatorApplicationMailingLists' => 'applications/mailinglists/application/PhabricatorApplicationMailingLists.php',
     'PhabricatorApplicationManiphest' => 'applications/maniphest/application/PhabricatorApplicationManiphest.php',
     'PhabricatorApplicationMetaMTA' => 'applications/metamta/application/PhabricatorApplicationMetaMTA.php',
     'PhabricatorApplicationOwners' => 'applications/owners/application/PhabricatorApplicationOwners.php',
     'PhabricatorApplicationPHPAST' => 'applications/phpast/application/PhabricatorApplicationPHPAST.php',
     'PhabricatorApplicationPaste' => 'applications/paste/application/PhabricatorApplicationPaste.php',
     'PhabricatorApplicationPeople' => 'applications/people/application/PhabricatorApplicationPeople.php',
     'PhabricatorApplicationPhame' => 'applications/phame/application/PhabricatorApplicationPhame.php',
     'PhabricatorApplicationPhlux' => 'applications/phlux/application/PhabricatorApplicationPhlux.php',
     'PhabricatorApplicationPholio' => 'applications/pholio/application/PhabricatorApplicationPholio.php',
     'PhabricatorApplicationPhortune' => 'applications/phortune/application/PhabricatorApplicationPhortune.php',
     'PhabricatorApplicationPhrequent' => 'applications/phrequent/application/PhabricatorApplicationPhrequent.php',
     'PhabricatorApplicationPhriction' => 'applications/phriction/application/PhabricatorApplicationPhriction.php',
     'PhabricatorApplicationPonder' => 'applications/ponder/application/PhabricatorApplicationPonder.php',
     'PhabricatorApplicationProject' => 'applications/project/application/PhabricatorApplicationProject.php',
     'PhabricatorApplicationReleeph' => 'applications/releeph/application/PhabricatorApplicationReleeph.php',
     'PhabricatorApplicationReleephConfigOptions' => 'applications/releeph/config/PhabricatorApplicationReleephConfigOptions.php',
     'PhabricatorApplicationRepositories' => 'applications/repository/application/PhabricatorApplicationRepositories.php',
     'PhabricatorApplicationSearch' => 'applications/search/application/PhabricatorApplicationSearch.php',
     'PhabricatorApplicationSearchController' => 'applications/search/controller/PhabricatorApplicationSearchController.php',
     'PhabricatorApplicationSearchEngine' => 'applications/search/engine/PhabricatorApplicationSearchEngine.php',
     'PhabricatorApplicationSearchResultsControllerInterface' => 'applications/search/interface/PhabricatorApplicationSearchResultsControllerInterface.php',
     'PhabricatorApplicationSettings' => 'applications/settings/application/PhabricatorApplicationSettings.php',
     'PhabricatorApplicationSlowvote' => 'applications/slowvote/application/PhabricatorApplicationSlowvote.php',
     'PhabricatorApplicationStatusView' => 'applications/meta/view/PhabricatorApplicationStatusView.php',
     'PhabricatorApplicationSubscriptions' => 'applications/subscriptions/application/PhabricatorApplicationSubscriptions.php',
     'PhabricatorApplicationTokens' => 'applications/tokens/application/PhabricatorApplicationTokens.php',
     'PhabricatorApplicationTransaction' => 'applications/transactions/storage/PhabricatorApplicationTransaction.php',
     'PhabricatorApplicationTransactionComment' => 'applications/transactions/storage/PhabricatorApplicationTransactionComment.php',
     'PhabricatorApplicationTransactionCommentEditController' => 'applications/transactions/controller/PhabricatorApplicationTransactionCommentEditController.php',
     'PhabricatorApplicationTransactionCommentEditor' => 'applications/transactions/editor/PhabricatorApplicationTransactionCommentEditor.php',
     'PhabricatorApplicationTransactionCommentHistoryController' => 'applications/transactions/controller/PhabricatorApplicationTransactionCommentHistoryController.php',
     'PhabricatorApplicationTransactionCommentQuery' => 'applications/transactions/query/PhabricatorApplicationTransactionCommentQuery.php',
     'PhabricatorApplicationTransactionCommentView' => 'applications/transactions/view/PhabricatorApplicationTransactionCommentView.php',
     'PhabricatorApplicationTransactionController' => 'applications/transactions/controller/PhabricatorApplicationTransactionController.php',
     'PhabricatorApplicationTransactionDetailController' => 'applications/transactions/controller/PhabricatorApplicationTransactionDetailController.php',
     'PhabricatorApplicationTransactionEditor' => 'applications/transactions/editor/PhabricatorApplicationTransactionEditor.php',
     'PhabricatorApplicationTransactionFeedStory' => 'applications/transactions/feed/PhabricatorApplicationTransactionFeedStory.php',
     'PhabricatorApplicationTransactionInterface' => 'applications/transactions/interface/PhabricatorApplicationTransactionInterface.php',
     'PhabricatorApplicationTransactionNoEffectException' => 'applications/transactions/exception/PhabricatorApplicationTransactionNoEffectException.php',
     'PhabricatorApplicationTransactionNoEffectResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionNoEffectResponse.php',
     'PhabricatorApplicationTransactionPHIDTypeTransaction' => 'applications/transactions/phid/PhabricatorApplicationTransactionPHIDTypeTransaction.php',
     'PhabricatorApplicationTransactionQuery' => 'applications/transactions/query/PhabricatorApplicationTransactionQuery.php',
     'PhabricatorApplicationTransactionResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionResponse.php',
     'PhabricatorApplicationTransactionTextDiffDetailView' => 'applications/transactions/view/PhabricatorApplicationTransactionTextDiffDetailView.php',
     'PhabricatorApplicationTransactionView' => 'applications/transactions/view/PhabricatorApplicationTransactionView.php',
     'PhabricatorApplicationTransactions' => 'applications/transactions/application/PhabricatorApplicationTransactions.php',
     'PhabricatorApplicationUIExamples' => 'applications/uiexample/application/PhabricatorApplicationUIExamples.php',
     'PhabricatorApplicationUninstallController' => 'applications/meta/controller/PhabricatorApplicationUninstallController.php',
     'PhabricatorApplicationXHProf' => 'applications/xhprof/application/PhabricatorApplicationXHProf.php',
     'PhabricatorApplicationsController' => 'applications/meta/controller/PhabricatorApplicationsController.php',
     'PhabricatorApplicationsListController' => 'applications/meta/controller/PhabricatorApplicationsListController.php',
     'PhabricatorAsanaConfigOptions' => 'applications/doorkeeper/option/PhabricatorAsanaConfigOptions.php',
     'PhabricatorAuditActionConstants' => 'applications/audit/constants/PhabricatorAuditActionConstants.php',
     'PhabricatorAuditAddCommentController' => 'applications/audit/controller/PhabricatorAuditAddCommentController.php',
     'PhabricatorAuditComment' => 'applications/audit/storage/PhabricatorAuditComment.php',
     'PhabricatorAuditCommentEditor' => 'applications/audit/editor/PhabricatorAuditCommentEditor.php',
     'PhabricatorAuditCommitListView' => 'applications/audit/view/PhabricatorAuditCommitListView.php',
     'PhabricatorAuditCommitQuery' => 'applications/audit/query/PhabricatorAuditCommitQuery.php',
     'PhabricatorAuditCommitStatusConstants' => 'applications/audit/constants/PhabricatorAuditCommitStatusConstants.php',
     'PhabricatorAuditController' => 'applications/audit/controller/PhabricatorAuditController.php',
     'PhabricatorAuditDAO' => 'applications/audit/storage/PhabricatorAuditDAO.php',
     'PhabricatorAuditInlineComment' => 'applications/audit/storage/PhabricatorAuditInlineComment.php',
     'PhabricatorAuditListController' => 'applications/audit/controller/PhabricatorAuditListController.php',
     'PhabricatorAuditListView' => 'applications/audit/view/PhabricatorAuditListView.php',
     'PhabricatorAuditMailReceiver' => 'applications/audit/mail/PhabricatorAuditMailReceiver.php',
     'PhabricatorAuditManagementDeleteWorkflow' => 'applications/audit/management/PhabricatorAuditManagementDeleteWorkflow.php',
     'PhabricatorAuditManagementWorkflow' => 'applications/audit/management/PhabricatorAuditManagementWorkflow.php',
     'PhabricatorAuditPreviewController' => 'applications/audit/controller/PhabricatorAuditPreviewController.php',
     'PhabricatorAuditQuery' => 'applications/audit/query/PhabricatorAuditQuery.php',
     'PhabricatorAuditReplyHandler' => 'applications/audit/mail/PhabricatorAuditReplyHandler.php',
     'PhabricatorAuditStatusConstants' => 'applications/audit/constants/PhabricatorAuditStatusConstants.php',
     'PhabricatorAuthAccountView' => 'applications/auth/view/PhabricatorAuthAccountView.php',
     'PhabricatorAuthConfirmLinkController' => 'applications/auth/controller/PhabricatorAuthConfirmLinkController.php',
     'PhabricatorAuthController' => 'applications/auth/controller/PhabricatorAuthController.php',
     'PhabricatorAuthDAO' => 'applications/auth/storage/PhabricatorAuthDAO.php',
     'PhabricatorAuthDisableController' => 'applications/auth/controller/config/PhabricatorAuthDisableController.php',
     'PhabricatorAuthEditController' => 'applications/auth/controller/config/PhabricatorAuthEditController.php',
     'PhabricatorAuthLinkController' => 'applications/auth/controller/PhabricatorAuthLinkController.php',
     'PhabricatorAuthListController' => 'applications/auth/controller/config/PhabricatorAuthListController.php',
     'PhabricatorAuthLoginController' => 'applications/auth/controller/PhabricatorAuthLoginController.php',
     'PhabricatorAuthManagementLDAPWorkflow' => 'applications/auth/management/PhabricatorAuthManagementLDAPWorkflow.php',
     'PhabricatorAuthManagementRecoverWorkflow' => 'applications/auth/management/PhabricatorAuthManagementRecoverWorkflow.php',
     'PhabricatorAuthManagementRefreshWorkflow' => 'applications/auth/management/PhabricatorAuthManagementRefreshWorkflow.php',
     'PhabricatorAuthManagementWorkflow' => 'applications/auth/management/PhabricatorAuthManagementWorkflow.php',
     'PhabricatorAuthNewController' => 'applications/auth/controller/config/PhabricatorAuthNewController.php',
     'PhabricatorAuthOldOAuthRedirectController' => 'applications/auth/controller/PhabricatorAuthOldOAuthRedirectController.php',
     'PhabricatorAuthProvider' => 'applications/auth/provider/PhabricatorAuthProvider.php',
     'PhabricatorAuthProviderConfig' => 'applications/auth/storage/PhabricatorAuthProviderConfig.php',
     'PhabricatorAuthProviderConfigController' => 'applications/auth/controller/config/PhabricatorAuthProviderConfigController.php',
     'PhabricatorAuthProviderConfigEditor' => 'applications/auth/editor/PhabricatorAuthProviderConfigEditor.php',
     'PhabricatorAuthProviderConfigQuery' => 'applications/auth/query/PhabricatorAuthProviderConfigQuery.php',
     'PhabricatorAuthProviderConfigTransaction' => 'applications/auth/storage/PhabricatorAuthProviderConfigTransaction.php',
     'PhabricatorAuthProviderConfigTransactionQuery' => 'applications/auth/query/PhabricatorAuthProviderConfigTransactionQuery.php',
     'PhabricatorAuthProviderLDAP' => 'applications/auth/provider/PhabricatorAuthProviderLDAP.php',
     'PhabricatorAuthProviderOAuth' => 'applications/auth/provider/PhabricatorAuthProviderOAuth.php',
     'PhabricatorAuthProviderOAuthAmazon' => 'applications/auth/provider/PhabricatorAuthProviderOAuthAmazon.php',
     'PhabricatorAuthProviderOAuthAsana' => 'applications/auth/provider/PhabricatorAuthProviderOAuthAsana.php',
     'PhabricatorAuthProviderOAuthDisqus' => 'applications/auth/provider/PhabricatorAuthProviderOAuthDisqus.php',
     'PhabricatorAuthProviderOAuthFacebook' => 'applications/auth/provider/PhabricatorAuthProviderOAuthFacebook.php',
     'PhabricatorAuthProviderOAuthGitHub' => 'applications/auth/provider/PhabricatorAuthProviderOAuthGitHub.php',
     'PhabricatorAuthProviderOAuthGoogle' => 'applications/auth/provider/PhabricatorAuthProviderOAuthGoogle.php',
     'PhabricatorAuthProviderOAuthTwitch' => 'applications/auth/provider/PhabricatorAuthProviderOAuthTwitch.php',
     'PhabricatorAuthProviderPassword' => 'applications/auth/provider/PhabricatorAuthProviderPassword.php',
     'PhabricatorAuthRegisterController' => 'applications/auth/controller/PhabricatorAuthRegisterController.php',
     'PhabricatorAuthStartController' => 'applications/auth/controller/PhabricatorAuthStartController.php',
     'PhabricatorAuthUnlinkController' => 'applications/auth/controller/PhabricatorAuthUnlinkController.php',
     'PhabricatorAuthValidateController' => 'applications/auth/controller/PhabricatorAuthValidateController.php',
     'PhabricatorAuthenticationConfigOptions' => 'applications/config/option/PhabricatorAuthenticationConfigOptions.php',
     'PhabricatorBarePageExample' => 'applications/uiexample/examples/PhabricatorBarePageExample.php',
     'PhabricatorBarePageView' => 'view/page/PhabricatorBarePageView.php',
     'PhabricatorBaseEnglishTranslation' => 'infrastructure/internationalization/PhabricatorBaseEnglishTranslation.php',
     'PhabricatorBaseProtocolAdapter' => 'infrastructure/daemon/bot/adapter/PhabricatorBaseProtocolAdapter.php',
     'PhabricatorBot' => 'infrastructure/daemon/bot/PhabricatorBot.php',
     'PhabricatorBotBaseStreamingProtocolAdapter' => 'infrastructure/daemon/bot/adapter/PhabricatorBotBaseStreamingProtocolAdapter.php',
     'PhabricatorBotChannel' => 'infrastructure/daemon/bot/target/PhabricatorBotChannel.php',
     'PhabricatorBotDebugLogHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotDebugLogHandler.php',
     'PhabricatorBotDifferentialNotificationHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotDifferentialNotificationHandler.php',
     'PhabricatorBotFeedNotificationHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotFeedNotificationHandler.php',
     'PhabricatorBotFlowdockProtocolAdapter' => 'infrastructure/daemon/bot/adapter/PhabricatorBotFlowdockProtocolAdapter.php',
     'PhabricatorBotHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotHandler.php',
     'PhabricatorBotLogHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotLogHandler.php',
     'PhabricatorBotMacroHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotMacroHandler.php',
     'PhabricatorBotMessage' => 'infrastructure/daemon/bot/PhabricatorBotMessage.php',
     'PhabricatorBotObjectNameHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotObjectNameHandler.php',
     'PhabricatorBotSymbolHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotSymbolHandler.php',
     'PhabricatorBotTarget' => 'infrastructure/daemon/bot/target/PhabricatorBotTarget.php',
     'PhabricatorBotUser' => 'infrastructure/daemon/bot/target/PhabricatorBotUser.php',
     'PhabricatorBotWhatsNewHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotWhatsNewHandler.php',
     'PhabricatorBuiltinPatchList' => 'infrastructure/storage/patch/PhabricatorBuiltinPatchList.php',
     'PhabricatorBusyExample' => 'applications/uiexample/examples/PhabricatorBusyExample.php',
     'PhabricatorCacheDAO' => 'applications/cache/storage/PhabricatorCacheDAO.php',
     'PhabricatorCacheManagementPurgeWorkflow' => 'applications/cache/management/PhabricatorCacheManagementPurgeWorkflow.php',
     'PhabricatorCacheManagementWorkflow' => 'applications/cache/management/PhabricatorCacheManagementWorkflow.php',
     'PhabricatorCaches' => 'applications/cache/PhabricatorCaches.php',
     'PhabricatorCalendarBrowseController' => 'applications/calendar/controller/PhabricatorCalendarBrowseController.php',
     'PhabricatorCalendarController' => 'applications/calendar/controller/PhabricatorCalendarController.php',
     'PhabricatorCalendarDAO' => 'applications/calendar/storage/PhabricatorCalendarDAO.php',
     'PhabricatorCalendarDeleteStatusController' => 'applications/calendar/controller/PhabricatorCalendarDeleteStatusController.php',
     'PhabricatorCalendarEditStatusController' => 'applications/calendar/controller/PhabricatorCalendarEditStatusController.php',
     'PhabricatorCalendarHoliday' => 'applications/calendar/storage/PhabricatorCalendarHoliday.php',
     'PhabricatorCalendarHolidayTestCase' => 'applications/calendar/storage/__tests__/PhabricatorCalendarHolidayTestCase.php',
     'PhabricatorCalendarViewStatusController' => 'applications/calendar/controller/PhabricatorCalendarViewStatusController.php',
     'PhabricatorCampfireProtocolAdapter' => 'infrastructure/daemon/bot/adapter/PhabricatorCampfireProtocolAdapter.php',
     'PhabricatorChangesetResponse' => 'infrastructure/diff/PhabricatorChangesetResponse.php',
     'PhabricatorChatLogChannel' => 'applications/chatlog/storage/PhabricatorChatLogChannel.php',
     'PhabricatorChatLogChannelListController' => 'applications/chatlog/controller/PhabricatorChatLogChannelListController.php',
     'PhabricatorChatLogChannelLogController' => 'applications/chatlog/controller/PhabricatorChatLogChannelLogController.php',
     'PhabricatorChatLogChannelQuery' => 'applications/chatlog/PhabricatorChatLogChannelQuery.php',
     'PhabricatorChatLogConstants' => 'applications/chatlog/constants/PhabricatorChatLogConstants.php',
     'PhabricatorChatLogController' => 'applications/chatlog/controller/PhabricatorChatLogController.php',
     'PhabricatorChatLogDAO' => 'applications/chatlog/storage/PhabricatorChatLogDAO.php',
     'PhabricatorChatLogEvent' => 'applications/chatlog/storage/PhabricatorChatLogEvent.php',
     'PhabricatorChatLogEventType' => 'applications/chatlog/constants/PhabricatorChatLogEventType.php',
     'PhabricatorChatLogQuery' => 'applications/chatlog/PhabricatorChatLogQuery.php',
     'PhabricatorConduitAPIController' => 'applications/conduit/controller/PhabricatorConduitAPIController.php',
     'PhabricatorConduitCertificateToken' => 'applications/conduit/storage/PhabricatorConduitCertificateToken.php',
     'PhabricatorConduitConfigOptions' => 'applications/conduit/config/PhabricatorConduitConfigOptions.php',
     'PhabricatorConduitConnectionLog' => 'applications/conduit/storage/PhabricatorConduitConnectionLog.php',
     'PhabricatorConduitConsoleController' => 'applications/conduit/controller/PhabricatorConduitConsoleController.php',
     'PhabricatorConduitController' => 'applications/conduit/controller/PhabricatorConduitController.php',
     'PhabricatorConduitDAO' => 'applications/conduit/storage/PhabricatorConduitDAO.php',
     'PhabricatorConduitListController' => 'applications/conduit/controller/PhabricatorConduitListController.php',
     'PhabricatorConduitLogController' => 'applications/conduit/controller/PhabricatorConduitLogController.php',
     'PhabricatorConduitLogQuery' => 'applications/conduit/query/PhabricatorConduitLogQuery.php',
     'PhabricatorConduitMethodCallLog' => 'applications/conduit/storage/PhabricatorConduitMethodCallLog.php',
     'PhabricatorConduitMethodQuery' => 'applications/conduit/query/PhabricatorConduitMethodQuery.php',
     'PhabricatorConduitSearchEngine' => 'applications/conduit/query/PhabricatorConduitSearchEngine.php',
     'PhabricatorConduitTokenController' => 'applications/conduit/controller/PhabricatorConduitTokenController.php',
     'PhabricatorConfigAllController' => 'applications/config/controller/PhabricatorConfigAllController.php',
     'PhabricatorConfigController' => 'applications/config/controller/PhabricatorConfigController.php',
     'PhabricatorConfigDatabaseSource' => 'infrastructure/env/PhabricatorConfigDatabaseSource.php',
     'PhabricatorConfigDefaultSource' => 'infrastructure/env/PhabricatorConfigDefaultSource.php',
     'PhabricatorConfigDictionarySource' => 'infrastructure/env/PhabricatorConfigDictionarySource.php',
     'PhabricatorConfigEditController' => 'applications/config/controller/PhabricatorConfigEditController.php',
     'PhabricatorConfigEditor' => 'applications/config/editor/PhabricatorConfigEditor.php',
     'PhabricatorConfigEntry' => 'applications/config/storage/PhabricatorConfigEntry.php',
     'PhabricatorConfigEntryDAO' => 'applications/config/storage/PhabricatorConfigEntryDAO.php',
     'PhabricatorConfigEntryQuery' => 'applications/config/query/PhabricatorConfigEntryQuery.php',
     'PhabricatorConfigFileSource' => 'infrastructure/env/PhabricatorConfigFileSource.php',
     'PhabricatorConfigGroupController' => 'applications/config/controller/PhabricatorConfigGroupController.php',
     'PhabricatorConfigIgnoreController' => 'applications/config/controller/PhabricatorConfigIgnoreController.php',
     'PhabricatorConfigIssueListController' => 'applications/config/controller/PhabricatorConfigIssueListController.php',
     'PhabricatorConfigIssueViewController' => 'applications/config/controller/PhabricatorConfigIssueViewController.php',
     'PhabricatorConfigJSON' => 'applications/config/json/PhabricatorConfigJSON.php',
     'PhabricatorConfigListController' => 'applications/config/controller/PhabricatorConfigListController.php',
     'PhabricatorConfigLocalSource' => 'infrastructure/env/PhabricatorConfigLocalSource.php',
     'PhabricatorConfigManagementDeleteWorkflow' => 'applications/config/management/PhabricatorConfigManagementDeleteWorkflow.php',
     'PhabricatorConfigManagementGetWorkflow' => 'applications/config/management/PhabricatorConfigManagementGetWorkflow.php',
     'PhabricatorConfigManagementListWorkflow' => 'applications/config/management/PhabricatorConfigManagementListWorkflow.php',
     'PhabricatorConfigManagementSetWorkflow' => 'applications/config/management/PhabricatorConfigManagementSetWorkflow.php',
     'PhabricatorConfigManagementWorkflow' => 'applications/config/management/PhabricatorConfigManagementWorkflow.php',
     'PhabricatorConfigOption' => 'applications/config/option/PhabricatorConfigOption.php',
     'PhabricatorConfigOptionType' => 'applications/config/custom/PhabricatorConfigOptionType.php',
     'PhabricatorConfigPHIDTypeConfig' => 'applications/config/phid/PhabricatorConfigPHIDTypeConfig.php',
     'PhabricatorConfigProxySource' => 'infrastructure/env/PhabricatorConfigProxySource.php',
     'PhabricatorConfigResponse' => 'applications/config/response/PhabricatorConfigResponse.php',
     'PhabricatorConfigSource' => 'infrastructure/env/PhabricatorConfigSource.php',
     'PhabricatorConfigStackSource' => 'infrastructure/env/PhabricatorConfigStackSource.php',
     'PhabricatorConfigTransaction' => 'applications/config/storage/PhabricatorConfigTransaction.php',
     'PhabricatorConfigTransactionQuery' => 'applications/config/query/PhabricatorConfigTransactionQuery.php',
     'PhabricatorConfigValidationException' => 'applications/config/exception/PhabricatorConfigValidationException.php',
     'PhabricatorConpherencePHIDTypeThread' => 'applications/conpherence/phid/PhabricatorConpherencePHIDTypeThread.php',
     'PhabricatorContentSource' => 'applications/metamta/contentsource/PhabricatorContentSource.php',
     'PhabricatorContentSourceView' => 'applications/metamta/contentsource/PhabricatorContentSourceView.php',
     'PhabricatorController' => 'applications/base/controller/PhabricatorController.php',
     'PhabricatorCoreConfigOptions' => 'applications/config/option/PhabricatorCoreConfigOptions.php',
     'PhabricatorCountdown' => 'applications/countdown/storage/PhabricatorCountdown.php',
     'PhabricatorCountdownController' => 'applications/countdown/controller/PhabricatorCountdownController.php',
     'PhabricatorCountdownDAO' => 'applications/countdown/storage/PhabricatorCountdownDAO.php',
     'PhabricatorCountdownDeleteController' => 'applications/countdown/controller/PhabricatorCountdownDeleteController.php',
     'PhabricatorCountdownEditController' => 'applications/countdown/controller/PhabricatorCountdownEditController.php',
     'PhabricatorCountdownListController' => 'applications/countdown/controller/PhabricatorCountdownListController.php',
     'PhabricatorCountdownPHIDTypeCountdown' => 'applications/countdown/phid/PhabricatorCountdownPHIDTypeCountdown.php',
     'PhabricatorCountdownQuery' => 'applications/countdown/query/PhabricatorCountdownQuery.php',
     'PhabricatorCountdownRemarkupRule' => 'applications/countdown/remarkup/PhabricatorCountdownRemarkupRule.php',
     'PhabricatorCountdownSearchEngine' => 'applications/countdown/query/PhabricatorCountdownSearchEngine.php',
     'PhabricatorCountdownView' => 'applications/countdown/view/PhabricatorCountdownView.php',
     'PhabricatorCountdownViewController' => 'applications/countdown/controller/PhabricatorCountdownViewController.php',
     'PhabricatorCrumbView' => 'view/layout/PhabricatorCrumbView.php',
     'PhabricatorCrumbsView' => 'view/layout/PhabricatorCrumbsView.php',
     'PhabricatorCursorPagedPolicyAwareQuery' => 'infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php',
     'PhabricatorCustomField' => 'infrastructure/customfield/field/PhabricatorCustomField.php',
     'PhabricatorCustomFieldAttachment' => 'infrastructure/customfield/field/PhabricatorCustomFieldAttachment.php',
     'PhabricatorCustomFieldConfigOptionType' => 'infrastructure/customfield/config/PhabricatorCustomFieldConfigOptionType.php',
     'PhabricatorCustomFieldDataNotAvailableException' => 'infrastructure/customfield/exception/PhabricatorCustomFieldDataNotAvailableException.php',
     'PhabricatorCustomFieldImplementationIncompleteException' => 'infrastructure/customfield/exception/PhabricatorCustomFieldImplementationIncompleteException.php',
     'PhabricatorCustomFieldIndexStorage' => 'infrastructure/customfield/storage/PhabricatorCustomFieldIndexStorage.php',
     'PhabricatorCustomFieldInterface' => 'infrastructure/customfield/interface/PhabricatorCustomFieldInterface.php',
     'PhabricatorCustomFieldList' => 'infrastructure/customfield/field/PhabricatorCustomFieldList.php',
     'PhabricatorCustomFieldNotAttachedException' => 'infrastructure/customfield/exception/PhabricatorCustomFieldNotAttachedException.php',
     'PhabricatorCustomFieldNotProxyException' => 'infrastructure/customfield/exception/PhabricatorCustomFieldNotProxyException.php',
     'PhabricatorCustomFieldNumericIndexStorage' => 'infrastructure/customfield/storage/PhabricatorCustomFieldNumericIndexStorage.php',
     'PhabricatorCustomFieldStorage' => 'infrastructure/customfield/storage/PhabricatorCustomFieldStorage.php',
     'PhabricatorCustomFieldStringIndexStorage' => 'infrastructure/customfield/storage/PhabricatorCustomFieldStringIndexStorage.php',
     'PhabricatorCustomFieldValidationException' => 'infrastructure/customfield/exception/PhabricatorCustomFieldValidationException.php',
     'PhabricatorDaemon' => 'infrastructure/daemon/PhabricatorDaemon.php',
     'PhabricatorDaemonCombinedLogController' => 'applications/daemon/controller/PhabricatorDaemonCombinedLogController.php',
     'PhabricatorDaemonConsoleController' => 'applications/daemon/controller/PhabricatorDaemonConsoleController.php',
     'PhabricatorDaemonController' => 'applications/daemon/controller/PhabricatorDaemonController.php',
     'PhabricatorDaemonDAO' => 'applications/daemon/storage/PhabricatorDaemonDAO.php',
     'PhabricatorDaemonEventListener' => 'applications/daemon/event/PhabricatorDaemonEventListener.php',
     'PhabricatorDaemonLog' => 'applications/daemon/storage/PhabricatorDaemonLog.php',
     'PhabricatorDaemonLogEvent' => 'applications/daemon/storage/PhabricatorDaemonLogEvent.php',
     'PhabricatorDaemonLogEventViewController' => 'applications/daemon/controller/PhabricatorDaemonLogEventViewController.php',
     'PhabricatorDaemonLogEventsView' => 'applications/daemon/view/PhabricatorDaemonLogEventsView.php',
     'PhabricatorDaemonLogListController' => 'applications/daemon/controller/PhabricatorDaemonLogListController.php',
     'PhabricatorDaemonLogListView' => 'applications/daemon/view/PhabricatorDaemonLogListView.php',
     'PhabricatorDaemonLogQuery' => 'applications/daemon/query/PhabricatorDaemonLogQuery.php',
     'PhabricatorDaemonLogViewController' => 'applications/daemon/controller/PhabricatorDaemonLogViewController.php',
     'PhabricatorDaemonManagementDebugWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementDebugWorkflow.php',
     'PhabricatorDaemonManagementLaunchWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementLaunchWorkflow.php',
     'PhabricatorDaemonManagementListWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementListWorkflow.php',
     'PhabricatorDaemonManagementLogWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementLogWorkflow.php',
     'PhabricatorDaemonManagementRestartWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementRestartWorkflow.php',
     'PhabricatorDaemonManagementStartWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStartWorkflow.php',
     'PhabricatorDaemonManagementStatusWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStatusWorkflow.php',
     'PhabricatorDaemonManagementStopWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStopWorkflow.php',
     'PhabricatorDaemonManagementWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementWorkflow.php',
     'PhabricatorDaemonReference' => 'infrastructure/daemon/control/PhabricatorDaemonReference.php',
     'PhabricatorDataNotAttachedException' => 'infrastructure/storage/lisk/PhabricatorDataNotAttachedException.php',
     'PhabricatorDebugController' => 'applications/system/PhabricatorDebugController.php',
     'PhabricatorDefaultFileStorageEngineSelector' => 'applications/files/engineselector/PhabricatorDefaultFileStorageEngineSelector.php',
     'PhabricatorDefaultSearchEngineSelector' => 'applications/search/selector/PhabricatorDefaultSearchEngineSelector.php',
     'PhabricatorDeveloperConfigOptions' => 'applications/config/option/PhabricatorDeveloperConfigOptions.php',
     'PhabricatorDifferenceEngine' => 'infrastructure/diff/PhabricatorDifferenceEngine.php',
     'PhabricatorDifferentialConfigOptions' => 'applications/differential/config/PhabricatorDifferentialConfigOptions.php',
     'PhabricatorDifferentialRevisionTestDataGenerator' => 'applications/differential/lipsum/PhabricatorDifferentialRevisionTestDataGenerator.php',
     'PhabricatorDiffusionConfigOptions' => 'applications/diffusion/config/PhabricatorDiffusionConfigOptions.php',
     'PhabricatorDirectoryController' => 'applications/directory/controller/PhabricatorDirectoryController.php',
     'PhabricatorDirectoryMainController' => 'applications/directory/controller/PhabricatorDirectoryMainController.php',
     'PhabricatorDisabledUserController' => 'applications/auth/controller/PhabricatorDisabledUserController.php',
     'PhabricatorDisqusConfigOptions' => 'applications/config/option/PhabricatorDisqusConfigOptions.php',
     'PhabricatorDraft' => 'applications/draft/storage/PhabricatorDraft.php',
     'PhabricatorDraftDAO' => 'applications/draft/storage/PhabricatorDraftDAO.php',
     'PhabricatorEdgeConfig' => 'infrastructure/edges/constants/PhabricatorEdgeConfig.php',
     'PhabricatorEdgeConstants' => 'infrastructure/edges/constants/PhabricatorEdgeConstants.php',
     'PhabricatorEdgeCycleException' => 'infrastructure/edges/exception/PhabricatorEdgeCycleException.php',
     'PhabricatorEdgeEditor' => 'infrastructure/edges/editor/PhabricatorEdgeEditor.php',
     'PhabricatorEdgeGraph' => 'infrastructure/edges/util/PhabricatorEdgeGraph.php',
     'PhabricatorEdgeQuery' => 'infrastructure/edges/query/PhabricatorEdgeQuery.php',
     'PhabricatorEdgeTestCase' => 'infrastructure/edges/__tests__/PhabricatorEdgeTestCase.php',
     'PhabricatorEditor' => 'infrastructure/PhabricatorEditor.php',
     'PhabricatorEmailLoginController' => 'applications/auth/controller/PhabricatorEmailLoginController.php',
     'PhabricatorEmailTokenController' => 'applications/auth/controller/PhabricatorEmailTokenController.php',
     'PhabricatorEmailVerificationController' => 'applications/auth/controller/PhabricatorEmailVerificationController.php',
     'PhabricatorEmptyQueryException' => 'infrastructure/query/PhabricatorEmptyQueryException.php',
     'PhabricatorEnglishTranslation' => 'infrastructure/internationalization/PhabricatorEnglishTranslation.php',
     'PhabricatorEnv' => 'infrastructure/env/PhabricatorEnv.php',
     'PhabricatorEnvTestCase' => 'infrastructure/env/__tests__/PhabricatorEnvTestCase.php',
     'PhabricatorErrorExample' => 'applications/uiexample/examples/PhabricatorErrorExample.php',
     'PhabricatorEvent' => 'infrastructure/events/PhabricatorEvent.php',
     'PhabricatorEventEngine' => 'infrastructure/events/PhabricatorEventEngine.php',
     'PhabricatorEventType' => 'infrastructure/events/constant/PhabricatorEventType.php',
     'PhabricatorExampleEventListener' => 'infrastructure/events/PhabricatorExampleEventListener.php',
     'PhabricatorExtendingPhabricatorConfigOptions' => 'applications/config/option/PhabricatorExtendingPhabricatorConfigOptions.php',
     'PhabricatorExternalAccount' => 'applications/people/storage/PhabricatorExternalAccount.php',
     'PhabricatorExternalAccountQuery' => 'applications/auth/query/PhabricatorExternalAccountQuery.php',
     'PhabricatorFactAggregate' => 'applications/fact/storage/PhabricatorFactAggregate.php',
     'PhabricatorFactChartController' => 'applications/fact/controller/PhabricatorFactChartController.php',
     'PhabricatorFactController' => 'applications/fact/controller/PhabricatorFactController.php',
     'PhabricatorFactCountEngine' => 'applications/fact/engine/PhabricatorFactCountEngine.php',
     'PhabricatorFactCursor' => 'applications/fact/storage/PhabricatorFactCursor.php',
     'PhabricatorFactDAO' => 'applications/fact/storage/PhabricatorFactDAO.php',
     'PhabricatorFactDaemon' => 'applications/fact/daemon/PhabricatorFactDaemon.php',
     'PhabricatorFactEngine' => 'applications/fact/engine/PhabricatorFactEngine.php',
     'PhabricatorFactHomeController' => 'applications/fact/controller/PhabricatorFactHomeController.php',
     'PhabricatorFactLastUpdatedEngine' => 'applications/fact/engine/PhabricatorFactLastUpdatedEngine.php',
     'PhabricatorFactManagementAnalyzeWorkflow' => 'applications/fact/management/PhabricatorFactManagementAnalyzeWorkflow.php',
     'PhabricatorFactManagementCursorsWorkflow' => 'applications/fact/management/PhabricatorFactManagementCursorsWorkflow.php',
     'PhabricatorFactManagementDestroyWorkflow' => 'applications/fact/management/PhabricatorFactManagementDestroyWorkflow.php',
     'PhabricatorFactManagementListWorkflow' => 'applications/fact/management/PhabricatorFactManagementListWorkflow.php',
     'PhabricatorFactManagementStatusWorkflow' => 'applications/fact/management/PhabricatorFactManagementStatusWorkflow.php',
     'PhabricatorFactManagementWorkflow' => 'applications/fact/management/PhabricatorFactManagementWorkflow.php',
     'PhabricatorFactRaw' => 'applications/fact/storage/PhabricatorFactRaw.php',
     'PhabricatorFactSimpleSpec' => 'applications/fact/spec/PhabricatorFactSimpleSpec.php',
     'PhabricatorFactSpec' => 'applications/fact/spec/PhabricatorFactSpec.php',
     'PhabricatorFactUpdateIterator' => 'applications/fact/extract/PhabricatorFactUpdateIterator.php',
     'PhabricatorFeedBuilder' => 'applications/feed/builder/PhabricatorFeedBuilder.php',
     'PhabricatorFeedConfigOptions' => 'applications/feed/config/PhabricatorFeedConfigOptions.php',
     'PhabricatorFeedConstants' => 'applications/feed/constants/PhabricatorFeedConstants.php',
     'PhabricatorFeedController' => 'applications/feed/controller/PhabricatorFeedController.php',
     'PhabricatorFeedDAO' => 'applications/feed/storage/PhabricatorFeedDAO.php',
     'PhabricatorFeedDetailController' => 'applications/feed/controller/PhabricatorFeedDetailController.php',
     'PhabricatorFeedListController' => 'applications/feed/controller/PhabricatorFeedListController.php',
     'PhabricatorFeedManagementRepublishWorkflow' => 'applications/feed/management/PhabricatorFeedManagementRepublishWorkflow.php',
     'PhabricatorFeedManagementWorkflow' => 'applications/feed/management/PhabricatorFeedManagementWorkflow.php',
     'PhabricatorFeedPublicStreamController' => 'applications/feed/controller/PhabricatorFeedPublicStreamController.php',
     'PhabricatorFeedQuery' => 'applications/feed/query/PhabricatorFeedQuery.php',
     'PhabricatorFeedSearchEngine' => 'applications/feed/query/PhabricatorFeedSearchEngine.php',
     'PhabricatorFeedStory' => 'applications/feed/story/PhabricatorFeedStory.php',
     'PhabricatorFeedStoryAggregate' => 'applications/feed/story/PhabricatorFeedStoryAggregate.php',
     'PhabricatorFeedStoryAudit' => 'applications/feed/story/PhabricatorFeedStoryAudit.php',
     'PhabricatorFeedStoryCommit' => 'applications/feed/story/PhabricatorFeedStoryCommit.php',
     'PhabricatorFeedStoryData' => 'applications/feed/storage/PhabricatorFeedStoryData.php',
     'PhabricatorFeedStoryDifferential' => 'applications/feed/story/PhabricatorFeedStoryDifferential.php',
     'PhabricatorFeedStoryDifferentialAggregate' => 'applications/feed/story/PhabricatorFeedStoryDifferentialAggregate.php',
     'PhabricatorFeedStoryManiphest' => 'applications/feed/story/PhabricatorFeedStoryManiphest.php',
     'PhabricatorFeedStoryManiphestAggregate' => 'applications/feed/story/PhabricatorFeedStoryManiphestAggregate.php',
     'PhabricatorFeedStoryNotification' => 'applications/notification/storage/PhabricatorFeedStoryNotification.php',
     'PhabricatorFeedStoryPhriction' => 'applications/feed/story/PhabricatorFeedStoryPhriction.php',
     'PhabricatorFeedStoryProject' => 'applications/feed/story/PhabricatorFeedStoryProject.php',
     'PhabricatorFeedStoryPublisher' => 'applications/feed/PhabricatorFeedStoryPublisher.php',
     'PhabricatorFeedStoryReference' => 'applications/feed/storage/PhabricatorFeedStoryReference.php',
     'PhabricatorFeedStoryStatus' => 'applications/feed/story/PhabricatorFeedStoryStatus.php',
     'PhabricatorFeedStoryTypeConstants' => 'applications/feed/constants/PhabricatorFeedStoryTypeConstants.php',
     'PhabricatorFile' => 'applications/files/storage/PhabricatorFile.php',
     'PhabricatorFileController' => 'applications/files/controller/PhabricatorFileController.php',
     'PhabricatorFileDAO' => 'applications/files/storage/PhabricatorFileDAO.php',
     'PhabricatorFileDataController' => 'applications/files/controller/PhabricatorFileDataController.php',
     'PhabricatorFileDeleteController' => 'applications/files/controller/PhabricatorFileDeleteController.php',
     'PhabricatorFileDropUploadController' => 'applications/files/controller/PhabricatorFileDropUploadController.php',
     'PhabricatorFileImageMacro' => 'applications/macro/storage/PhabricatorFileImageMacro.php',
     'PhabricatorFileInfoController' => 'applications/files/controller/PhabricatorFileInfoController.php',
     'PhabricatorFileLinkListView' => 'view/layout/PhabricatorFileLinkListView.php',
     'PhabricatorFileLinkView' => 'view/layout/PhabricatorFileLinkView.php',
     'PhabricatorFileListController' => 'applications/files/controller/PhabricatorFileListController.php',
     'PhabricatorFilePHIDTypeFile' => 'applications/files/phid/PhabricatorFilePHIDTypeFile.php',
     'PhabricatorFileQuery' => 'applications/files/query/PhabricatorFileQuery.php',
     'PhabricatorFileSearchEngine' => 'applications/files/query/PhabricatorFileSearchEngine.php',
     'PhabricatorFileShortcutController' => 'applications/files/controller/PhabricatorFileShortcutController.php',
     'PhabricatorFileStorageBlob' => 'applications/files/storage/PhabricatorFileStorageBlob.php',
     'PhabricatorFileStorageConfigurationException' => 'applications/files/exception/PhabricatorFileStorageConfigurationException.php',
     'PhabricatorFileStorageEngine' => 'applications/files/engine/PhabricatorFileStorageEngine.php',
     'PhabricatorFileStorageEngineSelector' => 'applications/files/engineselector/PhabricatorFileStorageEngineSelector.php',
     'PhabricatorFileTestCase' => 'applications/files/storage/__tests__/PhabricatorFileTestCase.php',
     'PhabricatorFileTestDataGenerator' => 'applications/files/lipsum/PhabricatorFileTestDataGenerator.php',
     'PhabricatorFileTransformController' => 'applications/files/controller/PhabricatorFileTransformController.php',
     'PhabricatorFileUploadController' => 'applications/files/controller/PhabricatorFileUploadController.php',
     'PhabricatorFileUploadDialogController' => 'applications/files/controller/PhabricatorFileUploadDialogController.php',
     'PhabricatorFileUploadException' => 'applications/files/exception/PhabricatorFileUploadException.php',
     'PhabricatorFilesConfigOptions' => 'applications/files/config/PhabricatorFilesConfigOptions.php',
     'PhabricatorFilesManagementEnginesWorkflow' => 'applications/files/management/PhabricatorFilesManagementEnginesWorkflow.php',
     'PhabricatorFilesManagementMigrateWorkflow' => 'applications/files/management/PhabricatorFilesManagementMigrateWorkflow.php',
     'PhabricatorFilesManagementPurgeWorkflow' => 'applications/files/management/PhabricatorFilesManagementPurgeWorkflow.php',
     'PhabricatorFilesManagementRebuildWorkflow' => 'applications/files/management/PhabricatorFilesManagementRebuildWorkflow.php',
     'PhabricatorFilesManagementWorkflow' => 'applications/files/management/PhabricatorFilesManagementWorkflow.php',
     'PhabricatorFlag' => 'applications/flag/storage/PhabricatorFlag.php',
     'PhabricatorFlagColor' => 'applications/flag/constants/PhabricatorFlagColor.php',
     'PhabricatorFlagConstants' => 'applications/flag/constants/PhabricatorFlagConstants.php',
     'PhabricatorFlagController' => 'applications/flag/controller/PhabricatorFlagController.php',
     'PhabricatorFlagDAO' => 'applications/flag/storage/PhabricatorFlagDAO.php',
     'PhabricatorFlagDeleteController' => 'applications/flag/controller/PhabricatorFlagDeleteController.php',
     'PhabricatorFlagEditController' => 'applications/flag/controller/PhabricatorFlagEditController.php',
     'PhabricatorFlagListController' => 'applications/flag/controller/PhabricatorFlagListController.php',
     'PhabricatorFlagQuery' => 'applications/flag/query/PhabricatorFlagQuery.php',
     'PhabricatorFlagSearchEngine' => 'applications/flag/query/PhabricatorFlagSearchEngine.php',
     'PhabricatorFlagSelectControl' => 'applications/flag/view/PhabricatorFlagSelectControl.php',
     'PhabricatorFlagsUIEventListener' => 'applications/flag/events/PhabricatorFlagsUIEventListener.php',
     'PhabricatorFormExample' => 'applications/uiexample/examples/PhabricatorFormExample.php',
     'PhabricatorGarbageCollectorConfigOptions' => 'applications/config/option/PhabricatorGarbageCollectorConfigOptions.php',
     'PhabricatorGarbageCollectorDaemon' => 'infrastructure/daemon/PhabricatorGarbageCollectorDaemon.php',
     'PhabricatorGestureExample' => 'applications/uiexample/examples/PhabricatorGestureExample.php',
     'PhabricatorGitGraphStream' => 'applications/repository/daemon/PhabricatorGitGraphStream.php',
     'PhabricatorGlobalLock' => 'infrastructure/util/PhabricatorGlobalLock.php',
     'PhabricatorGlobalUploadTargetView' => 'applications/files/view/PhabricatorGlobalUploadTargetView.php',
     'PhabricatorHandleObjectSelectorDataView' => 'applications/phid/handle/view/PhabricatorHandleObjectSelectorDataView.php',
     'PhabricatorHandleQuery' => 'applications/phid/query/PhabricatorHandleQuery.php',
     'PhabricatorHash' => 'infrastructure/util/PhabricatorHash.php',
     'PhabricatorHashTestCase' => 'infrastructure/util/__tests__/PhabricatorHashTestCase.php',
     'PhabricatorHeaderView' => 'view/layout/PhabricatorHeaderView.php',
     'PhabricatorHelpController' => 'applications/help/controller/PhabricatorHelpController.php',
     'PhabricatorHelpKeyboardShortcutController' => 'applications/help/controller/PhabricatorHelpKeyboardShortcutController.php',
     'PhabricatorHovercardExample' => 'applications/uiexample/examples/PhabricatorHovercardExample.php',
     'PhabricatorHovercardView' => 'view/widget/hovercard/PhabricatorHovercardView.php',
     'PhabricatorIRCBot' => 'infrastructure/daemon/bot/PhabricatorIRCBot.php',
     'PhabricatorIRCProtocolAdapter' => 'infrastructure/daemon/bot/adapter/PhabricatorIRCProtocolAdapter.php',
     'PhabricatorIRCProtocolHandler' => 'infrastructure/daemon/bot/handler/PhabricatorIRCProtocolHandler.php',
     'PhabricatorImageTransformer' => 'applications/files/PhabricatorImageTransformer.php',
     'PhabricatorInfrastructureTestCase' => 'infrastructure/__tests__/PhabricatorInfrastructureTestCase.php',
     'PhabricatorInlineCommentController' => 'infrastructure/diff/PhabricatorInlineCommentController.php',
     'PhabricatorInlineCommentInterface' => 'infrastructure/diff/interface/PhabricatorInlineCommentInterface.php',
     'PhabricatorInlineCommentPreviewController' => 'infrastructure/diff/PhabricatorInlineCommentPreviewController.php',
     'PhabricatorInlineSummaryView' => 'infrastructure/diff/view/PhabricatorInlineSummaryView.php',
     'PhabricatorJavelinLinter' => 'infrastructure/lint/linter/PhabricatorJavelinLinter.php',
     'PhabricatorJumpNavHandler' => 'applications/search/engine/PhabricatorJumpNavHandler.php',
     'PhabricatorKeyValueDatabaseCache' => 'applications/cache/PhabricatorKeyValueDatabaseCache.php',
     'PhabricatorLegalpadConfigOptions' => 'applications/legalpad/config/PhabricatorLegalpadConfigOptions.php',
     'PhabricatorLegalpadPHIDTypeDocument' => 'applications/legalpad/phid/PhabricatorLegalpadPHIDTypeDocument.php',
     'PhabricatorLintEngine' => 'infrastructure/lint/PhabricatorLintEngine.php',
     'PhabricatorLipsumArtist' => 'applications/lipsum/image/PhabricatorLipsumArtist.php',
     'PhabricatorLipsumGenerateWorkflow' => 'applications/lipsum/management/PhabricatorLipsumGenerateWorkflow.php',
     'PhabricatorLipsumManagementWorkflow' => 'applications/lipsum/management/PhabricatorLipsumManagementWorkflow.php',
     'PhabricatorLipsumMondrianArtist' => 'applications/lipsum/image/PhabricatorLipsumMondrianArtist.php',
     'PhabricatorLiskDAO' => 'infrastructure/storage/lisk/PhabricatorLiskDAO.php',
     'PhabricatorLocalDiskFileStorageEngine' => 'applications/files/engine/PhabricatorLocalDiskFileStorageEngine.php',
     'PhabricatorLocalTimeTestCase' => 'view/__tests__/PhabricatorLocalTimeTestCase.php',
     'PhabricatorLogoutController' => 'applications/auth/controller/PhabricatorLogoutController.php',
     'PhabricatorMacroCommentController' => 'applications/macro/controller/PhabricatorMacroCommentController.php',
     'PhabricatorMacroConfigOptions' => 'applications/macro/config/PhabricatorMacroConfigOptions.php',
     'PhabricatorMacroController' => 'applications/macro/controller/PhabricatorMacroController.php',
     'PhabricatorMacroDisableController' => 'applications/macro/controller/PhabricatorMacroDisableController.php',
     'PhabricatorMacroEditController' => 'applications/macro/controller/PhabricatorMacroEditController.php',
     'PhabricatorMacroEditor' => 'applications/macro/editor/PhabricatorMacroEditor.php',
     'PhabricatorMacroListController' => 'applications/macro/controller/PhabricatorMacroListController.php',
     'PhabricatorMacroMailReceiver' => 'applications/macro/mail/PhabricatorMacroMailReceiver.php',
     'PhabricatorMacroMemeController' => 'applications/macro/controller/PhabricatorMacroMemeController.php',
     'PhabricatorMacroMemeDialogController' => 'applications/macro/controller/PhabricatorMacroMemeDialogController.php',
     'PhabricatorMacroPHIDTypeMacro' => 'applications/macro/phid/PhabricatorMacroPHIDTypeMacro.php',
     'PhabricatorMacroQuery' => 'applications/macro/query/PhabricatorMacroQuery.php',
     'PhabricatorMacroReplyHandler' => 'applications/macro/mail/PhabricatorMacroReplyHandler.php',
     'PhabricatorMacroSearchEngine' => 'applications/macro/query/PhabricatorMacroSearchEngine.php',
     'PhabricatorMacroTransaction' => 'applications/macro/storage/PhabricatorMacroTransaction.php',
     'PhabricatorMacroTransactionComment' => 'applications/macro/storage/PhabricatorMacroTransactionComment.php',
     'PhabricatorMacroTransactionQuery' => 'applications/macro/query/PhabricatorMacroTransactionQuery.php',
     'PhabricatorMacroTransactionType' => 'applications/macro/constants/PhabricatorMacroTransactionType.php',
     'PhabricatorMacroViewController' => 'applications/macro/controller/PhabricatorMacroViewController.php',
     'PhabricatorMail' => 'applications/metamta/PhabricatorMail.php',
     'PhabricatorMailImplementationAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationAdapter.php',
     'PhabricatorMailImplementationAmazonSESAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationAmazonSESAdapter.php',
     'PhabricatorMailImplementationPHPMailerAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationPHPMailerAdapter.php',
     'PhabricatorMailImplementationPHPMailerLiteAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationPHPMailerLiteAdapter.php',
     'PhabricatorMailImplementationSendGridAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationSendGridAdapter.php',
     'PhabricatorMailImplementationTestAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationTestAdapter.php',
     'PhabricatorMailManagementListInboundWorkflow' => 'applications/metamta/management/PhabricatorMailManagementListInboundWorkflow.php',
     'PhabricatorMailManagementListOutboundWorkflow' => 'applications/metamta/management/PhabricatorMailManagementListOutboundWorkflow.php',
     'PhabricatorMailManagementReceiveTestWorkflow' => 'applications/metamta/management/PhabricatorMailManagementReceiveTestWorkflow.php',
     'PhabricatorMailManagementResendWorkflow' => 'applications/metamta/management/PhabricatorMailManagementResendWorkflow.php',
     'PhabricatorMailManagementSendTestWorkflow' => 'applications/metamta/management/PhabricatorMailManagementSendTestWorkflow.php',
     'PhabricatorMailManagementShowInboundWorkflow' => 'applications/metamta/management/PhabricatorMailManagementShowInboundWorkflow.php',
     'PhabricatorMailManagementShowOutboundWorkflow' => 'applications/metamta/management/PhabricatorMailManagementShowOutboundWorkflow.php',
     'PhabricatorMailManagementWorkflow' => 'applications/metamta/management/PhabricatorMailManagementWorkflow.php',
     'PhabricatorMailReceiver' => 'applications/metamta/receiver/PhabricatorMailReceiver.php',
     'PhabricatorMailReceiverTestCase' => 'applications/metamta/receiver/__tests__/PhabricatorMailReceiverTestCase.php',
     'PhabricatorMailReplyHandler' => 'applications/metamta/replyhandler/PhabricatorMailReplyHandler.php',
     'PhabricatorMailingListPHIDTypeList' => 'applications/mailinglists/phid/PhabricatorMailingListPHIDTypeList.php',
     'PhabricatorMailingListQuery' => 'applications/mailinglists/query/PhabricatorMailingListQuery.php',
     'PhabricatorMailingListSearchEngine' => 'applications/mailinglists/query/PhabricatorMailingListSearchEngine.php',
     'PhabricatorMailingListsController' => 'applications/mailinglists/controller/PhabricatorMailingListsController.php',
     'PhabricatorMailingListsEditController' => 'applications/mailinglists/controller/PhabricatorMailingListsEditController.php',
     'PhabricatorMailingListsListController' => 'applications/mailinglists/controller/PhabricatorMailingListsListController.php',
     'PhabricatorMainMenuGroupView' => 'view/page/menu/PhabricatorMainMenuGroupView.php',
     'PhabricatorMainMenuIconView' => 'view/page/menu/PhabricatorMainMenuIconView.php',
     'PhabricatorMainMenuSearchView' => 'view/page/menu/PhabricatorMainMenuSearchView.php',
     'PhabricatorMainMenuView' => 'view/page/menu/PhabricatorMainMenuView.php',
     'PhabricatorManiphestConfigOptions' => 'applications/maniphest/config/PhabricatorManiphestConfigOptions.php',
     'PhabricatorManiphestTaskTestDataGenerator' => 'applications/maniphest/lipsum/PhabricatorManiphestTaskTestDataGenerator.php',
     'PhabricatorMarkupCache' => 'applications/cache/storage/PhabricatorMarkupCache.php',
     'PhabricatorMarkupEngine' => 'infrastructure/markup/PhabricatorMarkupEngine.php',
     'PhabricatorMarkupInterface' => 'infrastructure/markup/PhabricatorMarkupInterface.php',
     'PhabricatorMarkupOneOff' => 'infrastructure/markup/PhabricatorMarkupOneOff.php',
     'PhabricatorMarkupPreviewController' => 'infrastructure/markup/PhabricatorMarkupPreviewController.php',
     'PhabricatorMercurialGraphStream' => 'applications/repository/daemon/PhabricatorMercurialGraphStream.php',
     'PhabricatorMetaMTAActor' => 'applications/metamta/query/PhabricatorMetaMTAActor.php',
     'PhabricatorMetaMTAActorQuery' => 'applications/metamta/query/PhabricatorMetaMTAActorQuery.php',
     'PhabricatorMetaMTAAttachment' => 'applications/metamta/storage/PhabricatorMetaMTAAttachment.php',
     'PhabricatorMetaMTAConfigOptions' => 'applications/config/option/PhabricatorMetaMTAConfigOptions.php',
     'PhabricatorMetaMTAController' => 'applications/metamta/controller/PhabricatorMetaMTAController.php',
     'PhabricatorMetaMTADAO' => 'applications/metamta/storage/PhabricatorMetaMTADAO.php',
     'PhabricatorMetaMTAEmailBodyParser' => 'applications/metamta/parser/PhabricatorMetaMTAEmailBodyParser.php',
     'PhabricatorMetaMTAEmailBodyParserTestCase' => 'applications/metamta/parser/__tests__/PhabricatorMetaMTAEmailBodyParserTestCase.php',
     'PhabricatorMetaMTAMail' => 'applications/metamta/storage/PhabricatorMetaMTAMail.php',
     'PhabricatorMetaMTAMailBody' => 'applications/metamta/view/PhabricatorMetaMTAMailBody.php',
     'PhabricatorMetaMTAMailBodyTestCase' => 'applications/metamta/view/__tests__/PhabricatorMetaMTAMailBodyTestCase.php',
     'PhabricatorMetaMTAMailTestCase' => 'applications/metamta/storage/__tests__/PhabricatorMetaMTAMailTestCase.php',
     'PhabricatorMetaMTAMailingList' => 'applications/mailinglists/storage/PhabricatorMetaMTAMailingList.php',
     'PhabricatorMetaMTAReceivedMail' => 'applications/metamta/storage/PhabricatorMetaMTAReceivedMail.php',
     'PhabricatorMetaMTAReceivedMailProcessingException' => 'applications/metamta/exception/PhabricatorMetaMTAReceivedMailProcessingException.php',
     'PhabricatorMetaMTAReceivedMailTestCase' => 'applications/metamta/storage/__tests__/PhabricatorMetaMTAReceivedMailTestCase.php',
     'PhabricatorMetaMTASendGridReceiveController' => 'applications/metamta/controller/PhabricatorMetaMTASendGridReceiveController.php',
     'PhabricatorMetaMTAWorker' => 'applications/metamta/PhabricatorMetaMTAWorker.php',
     'PhabricatorMultiColumnExample' => 'applications/uiexample/examples/PhabricatorMultiColumnExample.php',
     'PhabricatorMustVerifyEmailController' => 'applications/auth/controller/PhabricatorMustVerifyEmailController.php',
     'PhabricatorMySQLConfigOptions' => 'applications/config/option/PhabricatorMySQLConfigOptions.php',
     'PhabricatorMySQLFileStorageEngine' => 'applications/files/engine/PhabricatorMySQLFileStorageEngine.php',
     'PhabricatorNamedQuery' => 'applications/search/storage/PhabricatorNamedQuery.php',
     'PhabricatorNamedQueryQuery' => 'applications/search/query/PhabricatorNamedQueryQuery.php',
     'PhabricatorNoteExample' => 'applications/uiexample/examples/PhabricatorNoteExample.php',
     'PhabricatorNotificationBuilder' => 'applications/notification/builder/PhabricatorNotificationBuilder.php',
     'PhabricatorNotificationClearController' => 'applications/notification/controller/PhabricatorNotificationClearController.php',
     'PhabricatorNotificationConfigOptions' => 'applications/config/option/PhabricatorNotificationConfigOptions.php',
     'PhabricatorNotificationController' => 'applications/notification/controller/PhabricatorNotificationController.php',
     'PhabricatorNotificationIndividualController' => 'applications/notification/controller/PhabricatorNotificationIndividualController.php',
     'PhabricatorNotificationListController' => 'applications/notification/controller/PhabricatorNotificationListController.php',
     'PhabricatorNotificationPanelController' => 'applications/notification/controller/PhabricatorNotificationPanelController.php',
     'PhabricatorNotificationQuery' => 'applications/notification/PhabricatorNotificationQuery.php',
     'PhabricatorNotificationStatusController' => 'applications/notification/controller/PhabricatorNotificationStatusController.php',
     'PhabricatorOAuthClientAuthorization' => 'applications/oauthserver/storage/PhabricatorOAuthClientAuthorization.php',
     'PhabricatorOAuthClientAuthorizationBaseController' => 'applications/oauthserver/controller/clientauthorization/PhabricatorOAuthClientAuthorizationBaseController.php',
     'PhabricatorOAuthClientAuthorizationDeleteController' => 'applications/oauthserver/controller/clientauthorization/PhabricatorOAuthClientAuthorizationDeleteController.php',
     'PhabricatorOAuthClientAuthorizationEditController' => 'applications/oauthserver/controller/clientauthorization/PhabricatorOAuthClientAuthorizationEditController.php',
     'PhabricatorOAuthClientAuthorizationListController' => 'applications/oauthserver/controller/clientauthorization/PhabricatorOAuthClientAuthorizationListController.php',
     'PhabricatorOAuthClientAuthorizationQuery' => 'applications/oauthserver/query/PhabricatorOAuthClientAuthorizationQuery.php',
     'PhabricatorOAuthClientBaseController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientBaseController.php',
     'PhabricatorOAuthClientDeleteController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientDeleteController.php',
     'PhabricatorOAuthClientEditController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientEditController.php',
     'PhabricatorOAuthClientListController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientListController.php',
     'PhabricatorOAuthClientViewController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientViewController.php',
     'PhabricatorOAuthResponse' => 'applications/oauthserver/PhabricatorOAuthResponse.php',
     'PhabricatorOAuthServer' => 'applications/oauthserver/PhabricatorOAuthServer.php',
     'PhabricatorOAuthServerAccessToken' => 'applications/oauthserver/storage/PhabricatorOAuthServerAccessToken.php',
     'PhabricatorOAuthServerAuthController' => 'applications/oauthserver/controller/PhabricatorOAuthServerAuthController.php',
     'PhabricatorOAuthServerAuthorizationCode' => 'applications/oauthserver/storage/PhabricatorOAuthServerAuthorizationCode.php',
     'PhabricatorOAuthServerClient' => 'applications/oauthserver/storage/PhabricatorOAuthServerClient.php',
     'PhabricatorOAuthServerClientQuery' => 'applications/oauthserver/query/PhabricatorOAuthServerClientQuery.php',
     'PhabricatorOAuthServerController' => 'applications/oauthserver/controller/PhabricatorOAuthServerController.php',
     'PhabricatorOAuthServerDAO' => 'applications/oauthserver/storage/PhabricatorOAuthServerDAO.php',
     'PhabricatorOAuthServerScope' => 'applications/oauthserver/PhabricatorOAuthServerScope.php',
     'PhabricatorOAuthServerTestCase' => 'applications/oauthserver/__tests__/PhabricatorOAuthServerTestCase.php',
     'PhabricatorOAuthServerTestController' => 'applications/oauthserver/controller/PhabricatorOAuthServerTestController.php',
     'PhabricatorOAuthServerTokenController' => 'applications/oauthserver/controller/PhabricatorOAuthServerTokenController.php',
     'PhabricatorObjectHandle' => 'applications/phid/PhabricatorObjectHandle.php',
     'PhabricatorObjectHandleConstants' => 'applications/phid/handle/const/PhabricatorObjectHandleConstants.php',
     'PhabricatorObjectHandleData' => 'applications/phid/handle/PhabricatorObjectHandleData.php',
     'PhabricatorObjectHandleStatus' => 'applications/phid/handle/const/PhabricatorObjectHandleStatus.php',
     'PhabricatorObjectItemListExample' => 'applications/uiexample/examples/PhabricatorObjectItemListExample.php',
     'PhabricatorObjectItemListView' => 'view/layout/PhabricatorObjectItemListView.php',
     'PhabricatorObjectItemView' => 'view/layout/PhabricatorObjectItemView.php',
     'PhabricatorObjectListView' => 'view/control/PhabricatorObjectListView.php',
     'PhabricatorObjectMailReceiver' => 'applications/metamta/receiver/PhabricatorObjectMailReceiver.php',
     'PhabricatorObjectMailReceiverTestCase' => 'applications/metamta/receiver/__tests__/PhabricatorObjectMailReceiverTestCase.php',
     'PhabricatorObjectQuery' => 'applications/phid/query/PhabricatorObjectQuery.php',
     'PhabricatorObjectSelectorDialog' => 'view/control/PhabricatorObjectSelectorDialog.php',
     'PhabricatorOffsetPagedQuery' => 'infrastructure/query/PhabricatorOffsetPagedQuery.php',
     'PhabricatorOwnerPathQuery' => 'applications/owners/query/PhabricatorOwnerPathQuery.php',
     'PhabricatorOwnersConfigOptions' => 'applications/owners/config/PhabricatorOwnersConfigOptions.php',
     'PhabricatorOwnersController' => 'applications/owners/controller/PhabricatorOwnersController.php',
     'PhabricatorOwnersDAO' => 'applications/owners/storage/PhabricatorOwnersDAO.php',
     'PhabricatorOwnersDeleteController' => 'applications/owners/controller/PhabricatorOwnersDeleteController.php',
     'PhabricatorOwnersDetailController' => 'applications/owners/controller/PhabricatorOwnersDetailController.php',
     'PhabricatorOwnersEditController' => 'applications/owners/controller/PhabricatorOwnersEditController.php',
     'PhabricatorOwnersListController' => 'applications/owners/controller/PhabricatorOwnersListController.php',
     'PhabricatorOwnersOwner' => 'applications/owners/storage/PhabricatorOwnersOwner.php',
     'PhabricatorOwnersPHIDTypePackage' => 'applications/owners/phid/PhabricatorOwnersPHIDTypePackage.php',
     'PhabricatorOwnersPackage' => 'applications/owners/storage/PhabricatorOwnersPackage.php',
     'PhabricatorOwnersPackagePathValidator' => 'applications/repository/worker/commitchangeparser/PhabricatorOwnersPackagePathValidator.php',
     'PhabricatorOwnersPackageQuery' => 'applications/owners/query/PhabricatorOwnersPackageQuery.php',
     'PhabricatorOwnersPackageTestCase' => 'applications/owners/storage/__tests__/PhabricatorOwnersPackageTestCase.php',
     'PhabricatorOwnersPath' => 'applications/owners/storage/PhabricatorOwnersPath.php',
     'PhabricatorPHDConfigOptions' => 'applications/config/option/PhabricatorPHDConfigOptions.php',
     'PhabricatorPHID' => 'applications/phid/storage/PhabricatorPHID.php',
     'PhabricatorPHIDConstants' => 'applications/phid/PhabricatorPHIDConstants.php',
     'PhabricatorPHIDType' => 'applications/phid/type/PhabricatorPHIDType.php',
     'PhabricatorPHPMailerConfigOptions' => 'applications/config/option/PhabricatorPHPMailerConfigOptions.php',
     'PhabricatorPagedFormExample' => 'applications/uiexample/examples/PhabricatorPagedFormExample.php',
     'PhabricatorPaste' => 'applications/paste/storage/PhabricatorPaste.php',
     'PhabricatorPasteCommentController' => 'applications/paste/controller/PhabricatorPasteCommentController.php',
     'PhabricatorPasteConfigOptions' => 'applications/paste/config/PhabricatorPasteConfigOptions.php',
     'PhabricatorPasteController' => 'applications/paste/controller/PhabricatorPasteController.php',
     'PhabricatorPasteDAO' => 'applications/paste/storage/PhabricatorPasteDAO.php',
     'PhabricatorPasteEditController' => 'applications/paste/controller/PhabricatorPasteEditController.php',
     'PhabricatorPasteEditor' => 'applications/paste/editor/PhabricatorPasteEditor.php',
     'PhabricatorPasteListController' => 'applications/paste/controller/PhabricatorPasteListController.php',
     'PhabricatorPastePHIDTypePaste' => 'applications/paste/phid/PhabricatorPastePHIDTypePaste.php',
     'PhabricatorPasteQuery' => 'applications/paste/query/PhabricatorPasteQuery.php',
     'PhabricatorPasteRemarkupRule' => 'applications/paste/remarkup/PhabricatorPasteRemarkupRule.php',
     'PhabricatorPasteSearchEngine' => 'applications/paste/query/PhabricatorPasteSearchEngine.php',
     'PhabricatorPasteTestDataGenerator' => 'applications/paste/lipsum/PhabricatorPasteTestDataGenerator.php',
     'PhabricatorPasteTransaction' => 'applications/paste/storage/PhabricatorPasteTransaction.php',
     'PhabricatorPasteTransactionComment' => 'applications/paste/storage/PhabricatorPasteTransactionComment.php',
     'PhabricatorPasteTransactionQuery' => 'applications/paste/query/PhabricatorPasteTransactionQuery.php',
     'PhabricatorPasteViewController' => 'applications/paste/controller/PhabricatorPasteViewController.php',
     'PhabricatorPeopleController' => 'applications/people/controller/PhabricatorPeopleController.php',
     'PhabricatorPeopleEditController' => 'applications/people/controller/PhabricatorPeopleEditController.php',
     'PhabricatorPeopleHovercardEventListener' => 'applications/people/event/PhabricatorPeopleHovercardEventListener.php',
     'PhabricatorPeopleLdapController' => 'applications/people/controller/PhabricatorPeopleLdapController.php',
     'PhabricatorPeopleListController' => 'applications/people/controller/PhabricatorPeopleListController.php',
     'PhabricatorPeopleLogsController' => 'applications/people/controller/PhabricatorPeopleLogsController.php',
     'PhabricatorPeoplePHIDTypeExternal' => 'applications/people/phid/PhabricatorPeoplePHIDTypeExternal.php',
     'PhabricatorPeoplePHIDTypeUser' => 'applications/people/phid/PhabricatorPeoplePHIDTypeUser.php',
     'PhabricatorPeopleProfileController' => 'applications/people/controller/PhabricatorPeopleProfileController.php',
     'PhabricatorPeopleProfileEditController' => 'applications/people/controller/PhabricatorPeopleProfileEditController.php',
     'PhabricatorPeopleProfilePictureController' => 'applications/people/controller/PhabricatorPeopleProfilePictureController.php',
     'PhabricatorPeopleQuery' => 'applications/people/query/PhabricatorPeopleQuery.php',
     'PhabricatorPeopleSearchEngine' => 'applications/people/query/PhabricatorPeopleSearchEngine.php',
     'PhabricatorPeopleTestDataGenerator' => 'applications/people/lipsum/PhabricatorPeopleTestDataGenerator.php',
     'PhabricatorPhameConfigOptions' => 'applications/phame/config/PhabricatorPhameConfigOptions.php',
     'PhabricatorPhamePHIDTypeBlog' => 'applications/phame/phid/PhabricatorPhamePHIDTypeBlog.php',
     'PhabricatorPhamePHIDTypePost' => 'applications/phame/phid/PhabricatorPhamePHIDTypePost.php',
     'PhabricatorPholioConfigOptions' => 'applications/pholio/config/PhabricatorPholioConfigOptions.php',
     'PhabricatorPholioMockTestDataGenerator' => 'applications/pholio/lipsum/PhabricatorPholioMockTestDataGenerator.php',
     'PhabricatorPhortuneConfigOptions' => 'applications/phortune/option/PhabricatorPhortuneConfigOptions.php',
     'PhabricatorPhrequentConfigOptions' => 'applications/phrequent/config/PhabricatorPhrequentConfigOptions.php',
     'PhabricatorPhrictionConfigOptions' => 'applications/phriction/config/PhabricatorPhrictionConfigOptions.php',
     'PhabricatorPolicies' => 'applications/policy/constants/PhabricatorPolicies.php',
     'PhabricatorPolicy' => 'applications/policy/filter/PhabricatorPolicy.php',
     'PhabricatorPolicyAwareQuery' => 'infrastructure/query/policy/PhabricatorPolicyAwareQuery.php',
     'PhabricatorPolicyAwareTestQuery' => 'applications/policy/__tests__/PhabricatorPolicyAwareTestQuery.php',
     'PhabricatorPolicyCapability' => 'applications/policy/constants/PhabricatorPolicyCapability.php',
     'PhabricatorPolicyConfigOptions' => 'applications/config/option/PhabricatorPolicyConfigOptions.php',
     'PhabricatorPolicyConstants' => 'applications/policy/constants/PhabricatorPolicyConstants.php',
     'PhabricatorPolicyException' => 'applications/policy/exception/PhabricatorPolicyException.php',
     'PhabricatorPolicyFilter' => 'applications/policy/filter/PhabricatorPolicyFilter.php',
     'PhabricatorPolicyInterface' => 'applications/policy/interface/PhabricatorPolicyInterface.php',
     'PhabricatorPolicyQuery' => 'applications/policy/query/PhabricatorPolicyQuery.php',
     'PhabricatorPolicyTestCase' => 'applications/policy/__tests__/PhabricatorPolicyTestCase.php',
     'PhabricatorPolicyTestObject' => 'applications/policy/__tests__/PhabricatorPolicyTestObject.php',
     'PhabricatorPolicyType' => 'applications/policy/constants/PhabricatorPolicyType.php',
     'PhabricatorProject' => 'applications/project/storage/PhabricatorProject.php',
     'PhabricatorProjectConstants' => 'applications/project/constants/PhabricatorProjectConstants.php',
     'PhabricatorProjectController' => 'applications/project/controller/PhabricatorProjectController.php',
     'PhabricatorProjectCreateController' => 'applications/project/controller/PhabricatorProjectCreateController.php',
     'PhabricatorProjectDAO' => 'applications/project/storage/PhabricatorProjectDAO.php',
     'PhabricatorProjectEditor' => 'applications/project/editor/PhabricatorProjectEditor.php',
     'PhabricatorProjectEditorTestCase' => 'applications/project/editor/__tests__/PhabricatorProjectEditorTestCase.php',
     'PhabricatorProjectListController' => 'applications/project/controller/PhabricatorProjectListController.php',
     'PhabricatorProjectMembersEditController' => 'applications/project/controller/PhabricatorProjectMembersEditController.php',
     'PhabricatorProjectNameCollisionException' => 'applications/project/exception/PhabricatorProjectNameCollisionException.php',
     'PhabricatorProjectPHIDTypeProject' => 'applications/project/phid/PhabricatorProjectPHIDTypeProject.php',
     'PhabricatorProjectProfile' => 'applications/project/storage/PhabricatorProjectProfile.php',
     'PhabricatorProjectProfileController' => 'applications/project/controller/PhabricatorProjectProfileController.php',
     'PhabricatorProjectProfileEditController' => 'applications/project/controller/PhabricatorProjectProfileEditController.php',
     'PhabricatorProjectQuery' => 'applications/project/query/PhabricatorProjectQuery.php',
     'PhabricatorProjectSearchEngine' => 'applications/project/query/PhabricatorProjectSearchEngine.php',
     'PhabricatorProjectStatus' => 'applications/project/constants/PhabricatorProjectStatus.php',
     'PhabricatorProjectTestDataGenerator' => 'applications/project/lipsum/PhabricatorProjectTestDataGenerator.php',
     'PhabricatorProjectTransaction' => 'applications/project/storage/PhabricatorProjectTransaction.php',
     'PhabricatorProjectTransactionType' => 'applications/project/constants/PhabricatorProjectTransactionType.php',
     'PhabricatorProjectUpdateController' => 'applications/project/controller/PhabricatorProjectUpdateController.php',
     'PhabricatorPropertyListExample' => 'applications/uiexample/examples/PhabricatorPropertyListExample.php',
     'PhabricatorPropertyListView' => 'view/layout/PhabricatorPropertyListView.php',
     'PhabricatorQuery' => 'infrastructure/query/PhabricatorQuery.php',
     'PhabricatorRecaptchaConfigOptions' => 'applications/config/option/PhabricatorRecaptchaConfigOptions.php',
     'PhabricatorRedirectController' => 'applications/base/controller/PhabricatorRedirectController.php',
     'PhabricatorRefreshCSRFController' => 'applications/auth/controller/PhabricatorRefreshCSRFController.php',
     'PhabricatorRegistrationProfile' => 'applications/people/storage/PhabricatorRegistrationProfile.php',
     'PhabricatorRemarkupControl' => 'view/form/control/PhabricatorRemarkupControl.php',
     'PhabricatorRemarkupRuleEmbedFile' => 'applications/files/remarkup/PhabricatorRemarkupRuleEmbedFile.php',
     'PhabricatorRemarkupRuleImageMacro' => 'applications/macro/remarkup/PhabricatorRemarkupRuleImageMacro.php',
     'PhabricatorRemarkupRuleMeme' => 'applications/macro/remarkup/PhabricatorRemarkupRuleMeme.php',
     'PhabricatorRemarkupRuleMention' => 'applications/people/remarkup/PhabricatorRemarkupRuleMention.php',
     'PhabricatorRemarkupRuleObject' => 'infrastructure/markup/rule/PhabricatorRemarkupRuleObject.php',
     'PhabricatorRemarkupRuleYoutube' => 'infrastructure/markup/rule/PhabricatorRemarkupRuleYoutube.php',
     'PhabricatorRepository' => 'applications/repository/storage/PhabricatorRepository.php',
     'PhabricatorRepositoryArcanistProject' => 'applications/repository/storage/PhabricatorRepositoryArcanistProject.php',
     'PhabricatorRepositoryArcanistProjectDeleteController' => 'applications/repository/controller/PhabricatorRepositoryArcanistProjectDeleteController.php',
     'PhabricatorRepositoryArcanistProjectEditController' => 'applications/repository/controller/PhabricatorRepositoryArcanistProjectEditController.php',
     'PhabricatorRepositoryArcanistProjectQuery' => 'applications/repository/query/PhabricatorRepositoryArcanistProjectQuery.php',
     'PhabricatorRepositoryAuditRequest' => 'applications/repository/storage/PhabricatorRepositoryAuditRequest.php',
     'PhabricatorRepositoryBranch' => 'applications/repository/storage/PhabricatorRepositoryBranch.php',
     'PhabricatorRepositoryCommit' => 'applications/repository/storage/PhabricatorRepositoryCommit.php',
     'PhabricatorRepositoryCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryCommitChangeParserWorker.php',
     'PhabricatorRepositoryCommitData' => 'applications/repository/storage/PhabricatorRepositoryCommitData.php',
     'PhabricatorRepositoryCommitHeraldWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitHeraldWorker.php',
     'PhabricatorRepositoryCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryCommitMessageParserWorker.php',
     'PhabricatorRepositoryCommitOwnersWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitOwnersWorker.php',
     'PhabricatorRepositoryCommitParserWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitParserWorker.php',
     'PhabricatorRepositoryCommitRef' => 'applications/repository/engine/PhabricatorRepositoryCommitRef.php',
     'PhabricatorRepositoryCommitSearchIndexer' => 'applications/repository/search/PhabricatorRepositoryCommitSearchIndexer.php',
     'PhabricatorRepositoryConfigOptions' => 'applications/repository/PhabricatorRepositoryConfigOptions.php',
     'PhabricatorRepositoryController' => 'applications/repository/controller/PhabricatorRepositoryController.php',
     'PhabricatorRepositoryCreateController' => 'applications/repository/controller/PhabricatorRepositoryCreateController.php',
     'PhabricatorRepositoryDAO' => 'applications/repository/storage/PhabricatorRepositoryDAO.php',
     'PhabricatorRepositoryDeleteController' => 'applications/repository/controller/PhabricatorRepositoryDeleteController.php',
     'PhabricatorRepositoryDiscoveryEngine' => 'applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php',
     'PhabricatorRepositoryEditController' => 'applications/repository/controller/PhabricatorRepositoryEditController.php',
     'PhabricatorRepositoryEditor' => 'applications/repository/editor/PhabricatorRepositoryEditor.php',
     'PhabricatorRepositoryEngine' => 'applications/repository/engine/PhabricatorRepositoryEngine.php',
     'PhabricatorRepositoryGitCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryGitCommitChangeParserWorker.php',
     'PhabricatorRepositoryGitCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryGitCommitMessageParserWorker.php',
     'PhabricatorRepositoryListController' => 'applications/repository/controller/PhabricatorRepositoryListController.php',
     'PhabricatorRepositoryManagementDeleteWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDeleteWorkflow.php',
     'PhabricatorRepositoryManagementDiscoverWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDiscoverWorkflow.php',
     'PhabricatorRepositoryManagementListWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementListWorkflow.php',
     'PhabricatorRepositoryManagementPullWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementPullWorkflow.php',
     'PhabricatorRepositoryManagementWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementWorkflow.php',
     'PhabricatorRepositoryMercurialCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryMercurialCommitChangeParserWorker.php',
     'PhabricatorRepositoryMercurialCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryMercurialCommitMessageParserWorker.php',
     'PhabricatorRepositoryPHIDTypeArcanistProject' => 'applications/repository/phid/PhabricatorRepositoryPHIDTypeArcanistProject.php',
     'PhabricatorRepositoryPHIDTypeCommit' => 'applications/repository/phid/PhabricatorRepositoryPHIDTypeCommit.php',
     'PhabricatorRepositoryPHIDTypeRepository' => 'applications/repository/phid/PhabricatorRepositoryPHIDTypeRepository.php',
     'PhabricatorRepositoryPullEngine' => 'applications/repository/engine/PhabricatorRepositoryPullEngine.php',
     'PhabricatorRepositoryPullLocalDaemon' => 'applications/repository/daemon/PhabricatorRepositoryPullLocalDaemon.php',
     'PhabricatorRepositoryQuery' => 'applications/repository/query/PhabricatorRepositoryQuery.php',
     'PhabricatorRepositoryShortcut' => 'applications/repository/storage/PhabricatorRepositoryShortcut.php',
     'PhabricatorRepositorySvnCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositorySvnCommitChangeParserWorker.php',
     'PhabricatorRepositorySvnCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositorySvnCommitMessageParserWorker.php',
     'PhabricatorRepositorySymbol' => 'applications/repository/storage/PhabricatorRepositorySymbol.php',
     'PhabricatorRepositoryTestCase' => 'applications/repository/storage/__tests__/PhabricatorRepositoryTestCase.php',
     'PhabricatorRepositoryTransaction' => 'applications/repository/storage/PhabricatorRepositoryTransaction.php',
     'PhabricatorRepositoryTransactionQuery' => 'applications/repository/query/PhabricatorRepositoryTransactionQuery.php',
     'PhabricatorRepositoryType' => 'applications/repository/constants/PhabricatorRepositoryType.php',
     'PhabricatorS3FileStorageEngine' => 'applications/files/engine/PhabricatorS3FileStorageEngine.php',
     'PhabricatorSQLPatchList' => 'infrastructure/storage/patch/PhabricatorSQLPatchList.php',
     'PhabricatorSSHWorkflow' => 'infrastructure/ssh/PhabricatorSSHWorkflow.php',
     'PhabricatorSavedQuery' => 'applications/search/storage/PhabricatorSavedQuery.php',
     'PhabricatorSavedQueryQuery' => 'applications/search/query/PhabricatorSavedQueryQuery.php',
     'PhabricatorScopedEnv' => 'infrastructure/env/PhabricatorScopedEnv.php',
     'PhabricatorSearchAbstractDocument' => 'applications/search/index/PhabricatorSearchAbstractDocument.php',
     'PhabricatorSearchAttachController' => 'applications/search/controller/PhabricatorSearchAttachController.php',
     'PhabricatorSearchBaseController' => 'applications/search/controller/PhabricatorSearchBaseController.php',
     'PhabricatorSearchConfigOptions' => 'applications/search/config/PhabricatorSearchConfigOptions.php',
     'PhabricatorSearchController' => 'applications/search/controller/PhabricatorSearchController.php',
     'PhabricatorSearchDAO' => 'applications/search/storage/PhabricatorSearchDAO.php',
     'PhabricatorSearchDeleteController' => 'applications/search/controller/PhabricatorSearchDeleteController.php',
     'PhabricatorSearchDocument' => 'applications/search/storage/document/PhabricatorSearchDocument.php',
     'PhabricatorSearchDocumentField' => 'applications/search/storage/document/PhabricatorSearchDocumentField.php',
     'PhabricatorSearchDocumentIndexer' => 'applications/search/index/PhabricatorSearchDocumentIndexer.php',
     'PhabricatorSearchDocumentRelationship' => 'applications/search/storage/document/PhabricatorSearchDocumentRelationship.php',
     'PhabricatorSearchEditController' => 'applications/search/controller/PhabricatorSearchEditController.php',
     'PhabricatorSearchEngine' => 'applications/search/engine/PhabricatorSearchEngine.php',
     'PhabricatorSearchEngineElastic' => 'applications/search/engine/PhabricatorSearchEngineElastic.php',
     'PhabricatorSearchEngineMySQL' => 'applications/search/engine/PhabricatorSearchEngineMySQL.php',
     'PhabricatorSearchEngineSelector' => 'applications/search/selector/PhabricatorSearchEngineSelector.php',
     'PhabricatorSearchField' => 'applications/search/constants/PhabricatorSearchField.php',
     'PhabricatorSearchHovercardController' => 'applications/search/controller/PhabricatorSearchHovercardController.php',
     'PhabricatorSearchIndexer' => 'applications/search/index/PhabricatorSearchIndexer.php',
     'PhabricatorSearchManagementIndexWorkflow' => 'applications/search/management/PhabricatorSearchManagementIndexWorkflow.php',
     'PhabricatorSearchManagementWorkflow' => 'applications/search/management/PhabricatorSearchManagementWorkflow.php',
     'PhabricatorSearchOrderController' => 'applications/search/controller/PhabricatorSearchOrderController.php',
     'PhabricatorSearchQuery' => 'applications/search/storage/PhabricatorSearchQuery.php',
     'PhabricatorSearchRelationship' => 'applications/search/constants/PhabricatorSearchRelationship.php',
     'PhabricatorSearchResultView' => 'applications/search/view/PhabricatorSearchResultView.php',
     'PhabricatorSearchScope' => 'applications/search/constants/PhabricatorSearchScope.php',
     'PhabricatorSearchSelectController' => 'applications/search/controller/PhabricatorSearchSelectController.php',
     'PhabricatorSecurityConfigOptions' => 'applications/config/option/PhabricatorSecurityConfigOptions.php',
     'PhabricatorSendGridConfigOptions' => 'applications/config/option/PhabricatorSendGridConfigOptions.php',
     'PhabricatorSettingsAdjustController' => 'applications/settings/controller/PhabricatorSettingsAdjustController.php',
     'PhabricatorSettingsMainController' => 'applications/settings/controller/PhabricatorSettingsMainController.php',
     'PhabricatorSettingsPanel' => 'applications/settings/panel/PhabricatorSettingsPanel.php',
     'PhabricatorSettingsPanelAccount' => 'applications/settings/panel/PhabricatorSettingsPanelAccount.php',
     'PhabricatorSettingsPanelConduit' => 'applications/settings/panel/PhabricatorSettingsPanelConduit.php',
     'PhabricatorSettingsPanelConpherencePreferences' => 'applications/settings/panel/PhabricatorSettingsPanelConpherencePreferences.php',
     'PhabricatorSettingsPanelDeveloperPreferences' => 'applications/settings/panel/PhabricatorSettingsPanelDeveloperPreferences.php',
     'PhabricatorSettingsPanelDiffPreferences' => 'applications/settings/panel/PhabricatorSettingsPanelDiffPreferences.php',
     'PhabricatorSettingsPanelDisplayPreferences' => 'applications/settings/panel/PhabricatorSettingsPanelDisplayPreferences.php',
     'PhabricatorSettingsPanelEmailAddresses' => 'applications/settings/panel/PhabricatorSettingsPanelEmailAddresses.php',
     'PhabricatorSettingsPanelEmailPreferences' => 'applications/settings/panel/PhabricatorSettingsPanelEmailPreferences.php',
     'PhabricatorSettingsPanelExternalAccounts' => 'applications/settings/panel/PhabricatorSettingsPanelExternalAccounts.php',
     'PhabricatorSettingsPanelHomePreferences' => 'applications/settings/panel/PhabricatorSettingsPanelHomePreferences.php',
     'PhabricatorSettingsPanelPassword' => 'applications/settings/panel/PhabricatorSettingsPanelPassword.php',
     'PhabricatorSettingsPanelSSHKeys' => 'applications/settings/panel/PhabricatorSettingsPanelSSHKeys.php',
     'PhabricatorSettingsPanelSearchPreferences' => 'applications/settings/panel/PhabricatorSettingsPanelSearchPreferences.php',
     'PhabricatorSetupCheck' => 'applications/config/check/PhabricatorSetupCheck.php',
     'PhabricatorSetupCheckAPC' => 'applications/config/check/PhabricatorSetupCheckAPC.php',
     'PhabricatorSetupCheckAuth' => 'applications/config/check/PhabricatorSetupCheckAuth.php',
     'PhabricatorSetupCheckBaseURI' => 'applications/config/check/PhabricatorSetupCheckBaseURI.php',
     'PhabricatorSetupCheckBinaries' => 'applications/config/check/PhabricatorSetupCheckBinaries.php',
     'PhabricatorSetupCheckDatabase' => 'applications/config/check/PhabricatorSetupCheckDatabase.php',
     'PhabricatorSetupCheckExtensions' => 'applications/config/check/PhabricatorSetupCheckExtensions.php',
     'PhabricatorSetupCheckExtraConfig' => 'applications/config/check/PhabricatorSetupCheckExtraConfig.php',
     'PhabricatorSetupCheckFileinfo' => 'applications/config/check/PhabricatorSetupCheckFileinfo.php',
     'PhabricatorSetupCheckGD' => 'applications/config/check/PhabricatorSetupCheckGD.php',
     'PhabricatorSetupCheckImagemagick' => 'applications/config/check/PhabricatorSetupCheckImagemagick.php',
     'PhabricatorSetupCheckInvalidConfig' => 'applications/config/check/PhabricatorSetupCheckInvalidConfig.php',
     'PhabricatorSetupCheckMail' => 'applications/config/check/PhabricatorSetupCheckMail.php',
     'PhabricatorSetupCheckMySQL' => 'applications/config/check/PhabricatorSetupCheckMySQL.php',
     'PhabricatorSetupCheckPHPConfig' => 'applications/config/check/PhabricatorSetupCheckPHPConfig.php',
     'PhabricatorSetupCheckPath' => 'applications/config/check/PhabricatorSetupCheckPath.php',
     'PhabricatorSetupCheckPygment' => 'applications/config/check/PhabricatorSetupCheckPygment.php',
     'PhabricatorSetupCheckStorage' => 'applications/config/check/PhabricatorSetupCheckStorage.php',
     'PhabricatorSetupCheckTimezone' => 'applications/config/check/PhabricatorSetupCheckTimezone.php',
     'PhabricatorSetupIssue' => 'applications/config/issue/PhabricatorSetupIssue.php',
     'PhabricatorSetupIssueExample' => 'applications/uiexample/examples/PhabricatorSetupIssueExample.php',
     'PhabricatorSetupIssueView' => 'applications/config/view/PhabricatorSetupIssueView.php',
     'PhabricatorSlowvoteChoice' => 'applications/slowvote/storage/PhabricatorSlowvoteChoice.php',
     'PhabricatorSlowvoteComment' => 'applications/slowvote/storage/PhabricatorSlowvoteComment.php',
     'PhabricatorSlowvoteCommentController' => 'applications/slowvote/controller/PhabricatorSlowvoteCommentController.php',
     'PhabricatorSlowvoteController' => 'applications/slowvote/controller/PhabricatorSlowvoteController.php',
     'PhabricatorSlowvoteDAO' => 'applications/slowvote/storage/PhabricatorSlowvoteDAO.php',
     'PhabricatorSlowvoteEditController' => 'applications/slowvote/controller/PhabricatorSlowvoteEditController.php',
     'PhabricatorSlowvoteEditor' => 'applications/slowvote/editor/PhabricatorSlowvoteEditor.php',
     'PhabricatorSlowvoteListController' => 'applications/slowvote/controller/PhabricatorSlowvoteListController.php',
     'PhabricatorSlowvoteOption' => 'applications/slowvote/storage/PhabricatorSlowvoteOption.php',
     'PhabricatorSlowvotePHIDTypePoll' => 'applications/slowvote/phid/PhabricatorSlowvotePHIDTypePoll.php',
     'PhabricatorSlowvotePoll' => 'applications/slowvote/storage/PhabricatorSlowvotePoll.php',
     'PhabricatorSlowvotePollController' => 'applications/slowvote/controller/PhabricatorSlowvotePollController.php',
     'PhabricatorSlowvoteQuery' => 'applications/slowvote/query/PhabricatorSlowvoteQuery.php',
     'PhabricatorSlowvoteSearchEngine' => 'applications/slowvote/query/PhabricatorSlowvoteSearchEngine.php',
     'PhabricatorSlowvoteTransaction' => 'applications/slowvote/storage/PhabricatorSlowvoteTransaction.php',
     'PhabricatorSlowvoteTransactionComment' => 'applications/slowvote/storage/PhabricatorSlowvoteTransactionComment.php',
     'PhabricatorSlowvoteTransactionQuery' => 'applications/slowvote/query/PhabricatorSlowvoteTransactionQuery.php',
     'PhabricatorSlowvoteVoteController' => 'applications/slowvote/controller/PhabricatorSlowvoteVoteController.php',
     'PhabricatorSlug' => 'infrastructure/util/PhabricatorSlug.php',
     'PhabricatorSlugTestCase' => 'infrastructure/util/__tests__/PhabricatorSlugTestCase.php',
     'PhabricatorSortTableExample' => 'applications/uiexample/examples/PhabricatorSortTableExample.php',
     'PhabricatorSourceCodeView' => 'view/layout/PhabricatorSourceCodeView.php',
     'PhabricatorStandardCustomField' => 'infrastructure/customfield/field/PhabricatorStandardCustomField.php',
     'PhabricatorStandardCustomFieldInterface' => 'infrastructure/customfield/interface/PhabricatorStandardCustomFieldInterface.php',
     'PhabricatorStandardPageView' => 'view/page/PhabricatorStandardPageView.php',
     'PhabricatorStatusController' => 'applications/system/PhabricatorStatusController.php',
     'PhabricatorStorageFixtureScopeGuard' => 'infrastructure/testing/fixture/PhabricatorStorageFixtureScopeGuard.php',
     'PhabricatorStorageManagementAPI' => 'infrastructure/storage/management/PhabricatorStorageManagementAPI.php',
     'PhabricatorStorageManagementDatabasesWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementDatabasesWorkflow.php',
     'PhabricatorStorageManagementDestroyWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementDestroyWorkflow.php',
     'PhabricatorStorageManagementDumpWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementDumpWorkflow.php',
     'PhabricatorStorageManagementProbeWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementProbeWorkflow.php',
     'PhabricatorStorageManagementStatusWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementStatusWorkflow.php',
     'PhabricatorStorageManagementUpgradeWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementUpgradeWorkflow.php',
     'PhabricatorStorageManagementWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementWorkflow.php',
     'PhabricatorStoragePatch' => 'infrastructure/storage/management/PhabricatorStoragePatch.php',
     'PhabricatorSubscribableInterface' => 'applications/subscriptions/interface/PhabricatorSubscribableInterface.php',
     'PhabricatorSubscribersQuery' => 'applications/subscriptions/query/PhabricatorSubscribersQuery.php',
     'PhabricatorSubscriptionsEditController' => 'applications/subscriptions/controller/PhabricatorSubscriptionsEditController.php',
     'PhabricatorSubscriptionsEditor' => 'applications/subscriptions/editor/PhabricatorSubscriptionsEditor.php',
     'PhabricatorSubscriptionsUIEventListener' => 'applications/subscriptions/events/PhabricatorSubscriptionsUIEventListener.php',
     'PhabricatorSymbolNameLinter' => 'infrastructure/lint/hook/PhabricatorSymbolNameLinter.php',
     'PhabricatorSyntaxHighlighter' => 'infrastructure/markup/PhabricatorSyntaxHighlighter.php',
     'PhabricatorSyntaxHighlightingConfigOptions' => 'applications/config/option/PhabricatorSyntaxHighlightingConfigOptions.php',
     'PhabricatorTagExample' => 'applications/uiexample/examples/PhabricatorTagExample.php',
     'PhabricatorTagView' => 'view/layout/PhabricatorTagView.php',
     'PhabricatorTaskmasterDaemon' => 'infrastructure/daemon/workers/PhabricatorTaskmasterDaemon.php',
     'PhabricatorTestCase' => 'infrastructure/testing/PhabricatorTestCase.php',
     'PhabricatorTestDataGenerator' => 'applications/lipsum/generator/PhabricatorTestDataGenerator.php',
     'PhabricatorTestStorageEngine' => 'applications/files/engine/PhabricatorTestStorageEngine.php',
     'PhabricatorTestWorker' => 'infrastructure/daemon/workers/__tests__/PhabricatorTestWorker.php',
     'PhabricatorTime' => 'infrastructure/time/PhabricatorTime.php',
     'PhabricatorTimeGuard' => 'infrastructure/time/PhabricatorTimeGuard.php',
     'PhabricatorTimeTestCase' => 'infrastructure/time/__tests__/PhabricatorTimeTestCase.php',
     'PhabricatorTimelineEventView' => 'view/layout/PhabricatorTimelineEventView.php',
     'PhabricatorTimelineExample' => 'applications/uiexample/examples/PhabricatorTimelineExample.php',
     'PhabricatorTimelineView' => 'view/layout/PhabricatorTimelineView.php',
     'PhabricatorToken' => 'applications/tokens/storage/PhabricatorToken.php',
     'PhabricatorTokenController' => 'applications/tokens/controller/PhabricatorTokenController.php',
     'PhabricatorTokenCount' => 'applications/tokens/storage/PhabricatorTokenCount.php',
     'PhabricatorTokenCountQuery' => 'applications/tokens/query/PhabricatorTokenCountQuery.php',
     'PhabricatorTokenDAO' => 'applications/tokens/storage/PhabricatorTokenDAO.php',
     'PhabricatorTokenGiveController' => 'applications/tokens/controller/PhabricatorTokenGiveController.php',
     'PhabricatorTokenGiven' => 'applications/tokens/storage/PhabricatorTokenGiven.php',
     'PhabricatorTokenGivenController' => 'applications/tokens/controller/PhabricatorTokenGivenController.php',
     'PhabricatorTokenGivenEditor' => 'applications/tokens/editor/PhabricatorTokenGivenEditor.php',
     'PhabricatorTokenGivenFeedStory' => 'applications/tokens/feed/PhabricatorTokenGivenFeedStory.php',
     'PhabricatorTokenGivenQuery' => 'applications/tokens/query/PhabricatorTokenGivenQuery.php',
     'PhabricatorTokenLeaderController' => 'applications/tokens/controller/PhabricatorTokenLeaderController.php',
     'PhabricatorTokenQuery' => 'applications/tokens/query/PhabricatorTokenQuery.php',
     'PhabricatorTokenReceiverInterface' => 'applications/tokens/interface/PhabricatorTokenReceiverInterface.php',
     'PhabricatorTokenReceiverQuery' => 'applications/tokens/query/PhabricatorTokenReceiverQuery.php',
     'PhabricatorTokenUIEventListener' => 'applications/tokens/event/PhabricatorTokenUIEventListener.php',
     'PhabricatorTransactionView' => 'view/layout/PhabricatorTransactionView.php',
     'PhabricatorTransactions' => 'applications/transactions/constants/PhabricatorTransactions.php',
     'PhabricatorTransformedFile' => 'applications/files/storage/PhabricatorTransformedFile.php',
     'PhabricatorTranslation' => 'infrastructure/internationalization/PhabricatorTranslation.php',
     'PhabricatorTranslationsConfigOptions' => 'applications/config/option/PhabricatorTranslationsConfigOptions.php',
     'PhabricatorTrivialTestCase' => 'infrastructure/testing/__tests__/PhabricatorTrivialTestCase.php',
     'PhabricatorTwoColumnExample' => 'applications/uiexample/examples/PhabricatorTwoColumnExample.php',
     'PhabricatorTypeaheadCommonDatasourceController' => 'applications/typeahead/controller/PhabricatorTypeaheadCommonDatasourceController.php',
     'PhabricatorTypeaheadDatasourceController' => 'applications/typeahead/controller/PhabricatorTypeaheadDatasourceController.php',
     'PhabricatorTypeaheadResult' => 'applications/typeahead/storage/PhabricatorTypeaheadResult.php',
     'PhabricatorUIExample' => 'applications/uiexample/examples/PhabricatorUIExample.php',
     'PhabricatorUIExampleRenderController' => 'applications/uiexample/controller/PhabricatorUIExampleRenderController.php',
     'PhabricatorUIListFilterExample' => 'applications/uiexample/examples/PhabricatorUIListFilterExample.php',
     'PhabricatorUINotificationExample' => 'applications/uiexample/examples/PhabricatorUINotificationExample.php',
     'PhabricatorUIPagerExample' => 'applications/uiexample/examples/PhabricatorUIPagerExample.php',
     'PhabricatorUIStatusExample' => 'applications/uiexample/examples/PhabricatorUIStatusExample.php',
     'PhabricatorUITooltipExample' => 'applications/uiexample/examples/PhabricatorUITooltipExample.php',
     'PhabricatorUnitsTestCase' => 'view/__tests__/PhabricatorUnitsTestCase.php',
     'PhabricatorUser' => 'applications/people/storage/PhabricatorUser.php',
     'PhabricatorUserBlurbField' => 'applications/people/customfield/PhabricatorUserBlurbField.php',
     'PhabricatorUserConfigOptions' => 'applications/people/config/PhabricatorUserConfigOptions.php',
     'PhabricatorUserConfiguredCustomField' => 'applications/people/customfield/PhabricatorUserConfiguredCustomField.php',
     'PhabricatorUserConfiguredCustomFieldStorage' => 'applications/people/storage/PhabricatorUserConfiguredCustomFieldStorage.php',
     'PhabricatorUserCustomField' => 'applications/people/customfield/PhabricatorUserCustomField.php',
     'PhabricatorUserDAO' => 'applications/people/storage/PhabricatorUserDAO.php',
     'PhabricatorUserEditor' => 'applications/people/editor/PhabricatorUserEditor.php',
     'PhabricatorUserEmail' => 'applications/people/storage/PhabricatorUserEmail.php',
     'PhabricatorUserLog' => 'applications/people/storage/PhabricatorUserLog.php',
     'PhabricatorUserPreferences' => 'applications/settings/storage/PhabricatorUserPreferences.php',
     'PhabricatorUserProfile' => 'applications/people/storage/PhabricatorUserProfile.php',
     'PhabricatorUserProfileEditor' => 'applications/people/editor/PhabricatorUserProfileEditor.php',
     'PhabricatorUserRealNameField' => 'applications/people/customfield/PhabricatorUserRealNameField.php',
     'PhabricatorUserRolesField' => 'applications/people/customfield/PhabricatorUserRolesField.php',
     'PhabricatorUserSSHKey' => 'applications/settings/storage/PhabricatorUserSSHKey.php',
     'PhabricatorUserSearchIndexer' => 'applications/people/search/PhabricatorUserSearchIndexer.php',
     'PhabricatorUserSinceField' => 'applications/people/customfield/PhabricatorUserSinceField.php',
     'PhabricatorUserStatus' => 'applications/people/storage/PhabricatorUserStatus.php',
     'PhabricatorUserStatusField' => 'applications/people/customfield/PhabricatorUserStatusField.php',
     'PhabricatorUserStatusInvalidEpochException' => 'applications/people/exception/PhabricatorUserStatusInvalidEpochException.php',
     'PhabricatorUserStatusOverlapException' => 'applications/people/exception/PhabricatorUserStatusOverlapException.php',
     'PhabricatorUserTestCase' => 'applications/people/storage/__tests__/PhabricatorUserTestCase.php',
     'PhabricatorUserTitleField' => 'applications/people/customfield/PhabricatorUserTitleField.php',
     'PhabricatorUserTransaction' => 'applications/people/storage/PhabricatorUserTransaction.php',
     'PhabricatorWorkboardExample' => 'applications/uiexample/examples/PhabricatorWorkboardExample.php',
     'PhabricatorWorkboardView' => 'view/layout/PhabricatorWorkboardView.php',
     'PhabricatorWorker' => 'infrastructure/daemon/workers/PhabricatorWorker.php',
     'PhabricatorWorkerActiveTask' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerActiveTask.php',
     'PhabricatorWorkerArchiveTask' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerArchiveTask.php',
     'PhabricatorWorkerDAO' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerDAO.php',
     'PhabricatorWorkerLeaseQuery' => 'infrastructure/daemon/workers/query/PhabricatorWorkerLeaseQuery.php',
     'PhabricatorWorkerPermanentFailureException' => 'infrastructure/daemon/workers/exception/PhabricatorWorkerPermanentFailureException.php',
     'PhabricatorWorkerTask' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerTask.php',
     'PhabricatorWorkerTaskData' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerTaskData.php',
     'PhabricatorWorkerTaskDetailController' => 'applications/daemon/controller/PhabricatorWorkerTaskDetailController.php',
     'PhabricatorWorkerTaskUpdateController' => 'applications/daemon/controller/PhabricatorWorkerTaskUpdateController.php',
     'PhabricatorWorkerTestCase' => 'infrastructure/daemon/workers/__tests__/PhabricatorWorkerTestCase.php',
     'PhabricatorWorkingCopyDiscoveryTestCase' => 'applications/repository/engine/__tests__/PhabricatorWorkingCopyDiscoveryTestCase.php',
     'PhabricatorWorkingCopyPullTestCase' => 'applications/repository/engine/__tests__/PhabricatorWorkingCopyPullTestCase.php',
     'PhabricatorWorkingCopyTestCase' => 'applications/repository/engine/__tests__/PhabricatorWorkingCopyTestCase.php',
     'PhabricatorWorkpanelView' => 'view/layout/PhabricatorWorkpanelView.php',
     'PhabricatorXHPASTViewController' => 'applications/phpast/controller/PhabricatorXHPASTViewController.php',
     'PhabricatorXHPASTViewDAO' => 'applications/phpast/storage/PhabricatorXHPASTViewDAO.php',
     'PhabricatorXHPASTViewFrameController' => 'applications/phpast/controller/PhabricatorXHPASTViewFrameController.php',
     'PhabricatorXHPASTViewFramesetController' => 'applications/phpast/controller/PhabricatorXHPASTViewFramesetController.php',
     'PhabricatorXHPASTViewInputController' => 'applications/phpast/controller/PhabricatorXHPASTViewInputController.php',
     'PhabricatorXHPASTViewPanelController' => 'applications/phpast/controller/PhabricatorXHPASTViewPanelController.php',
     'PhabricatorXHPASTViewParseTree' => 'applications/phpast/storage/PhabricatorXHPASTViewParseTree.php',
     'PhabricatorXHPASTViewRunController' => 'applications/phpast/controller/PhabricatorXHPASTViewRunController.php',
     'PhabricatorXHPASTViewStreamController' => 'applications/phpast/controller/PhabricatorXHPASTViewStreamController.php',
     'PhabricatorXHPASTViewTreeController' => 'applications/phpast/controller/PhabricatorXHPASTViewTreeController.php',
     'PhabricatorXHProfController' => 'applications/xhprof/controller/PhabricatorXHProfController.php',
     'PhabricatorXHProfDAO' => 'applications/xhprof/storage/PhabricatorXHProfDAO.php',
     'PhabricatorXHProfProfileController' => 'applications/xhprof/controller/PhabricatorXHProfProfileController.php',
     'PhabricatorXHProfProfileSymbolView' => 'applications/xhprof/view/PhabricatorXHProfProfileSymbolView.php',
     'PhabricatorXHProfProfileTopLevelView' => 'applications/xhprof/view/PhabricatorXHProfProfileTopLevelView.php',
     'PhabricatorXHProfProfileView' => 'applications/xhprof/view/PhabricatorXHProfProfileView.php',
     'PhabricatorXHProfSample' => 'applications/xhprof/storage/PhabricatorXHProfSample.php',
     'PhabricatorXHProfSampleListController' => 'applications/xhprof/controller/PhabricatorXHProfSampleListController.php',
     'PhameBasicBlogSkin' => 'applications/phame/skins/PhameBasicBlogSkin.php',
     'PhameBasicTemplateBlogSkin' => 'applications/phame/skins/PhameBasicTemplateBlogSkin.php',
     'PhameBlog' => 'applications/phame/storage/PhameBlog.php',
     'PhameBlogDeleteController' => 'applications/phame/controller/blog/PhameBlogDeleteController.php',
     'PhameBlogEditController' => 'applications/phame/controller/blog/PhameBlogEditController.php',
     'PhameBlogFeedController' => 'applications/phame/controller/blog/PhameBlogFeedController.php',
     'PhameBlogListController' => 'applications/phame/controller/blog/PhameBlogListController.php',
     'PhameBlogLiveController' => 'applications/phame/controller/blog/PhameBlogLiveController.php',
     'PhameBlogQuery' => 'applications/phame/query/PhameBlogQuery.php',
     'PhameBlogSkin' => 'applications/phame/skins/PhameBlogSkin.php',
     'PhameBlogViewController' => 'applications/phame/controller/blog/PhameBlogViewController.php',
     'PhameController' => 'applications/phame/controller/PhameController.php',
     'PhameDAO' => 'applications/phame/storage/PhameDAO.php',
     'PhamePost' => 'applications/phame/storage/PhamePost.php',
     'PhamePostDeleteController' => 'applications/phame/controller/post/PhamePostDeleteController.php',
     'PhamePostEditController' => 'applications/phame/controller/post/PhamePostEditController.php',
     'PhamePostFramedController' => 'applications/phame/controller/post/PhamePostFramedController.php',
     'PhamePostListController' => 'applications/phame/controller/post/PhamePostListController.php',
     'PhamePostNewController' => 'applications/phame/controller/post/PhamePostNewController.php',
     'PhamePostNotLiveController' => 'applications/phame/controller/post/PhamePostNotLiveController.php',
     'PhamePostPreviewController' => 'applications/phame/controller/post/PhamePostPreviewController.php',
     'PhamePostPublishController' => 'applications/phame/controller/post/PhamePostPublishController.php',
     'PhamePostQuery' => 'applications/phame/query/PhamePostQuery.php',
     'PhamePostUnpublishController' => 'applications/phame/controller/post/PhamePostUnpublishController.php',
     'PhamePostView' => 'applications/phame/view/PhamePostView.php',
     'PhamePostViewController' => 'applications/phame/controller/post/PhamePostViewController.php',
     'PhameResourceController' => 'applications/phame/controller/PhameResourceController.php',
     'PhameSkinSpecification' => 'applications/phame/skins/PhameSkinSpecification.php',
     'PhluxController' => 'applications/phlux/controller/PhluxController.php',
     'PhluxDAO' => 'applications/phlux/storage/PhluxDAO.php',
     'PhluxEditController' => 'applications/phlux/controller/PhluxEditController.php',
     'PhluxListController' => 'applications/phlux/controller/PhluxListController.php',
     'PhluxPHIDTypeVariable' => 'applications/phlux/phid/PhluxPHIDTypeVariable.php',
     'PhluxTransaction' => 'applications/phlux/storage/PhluxTransaction.php',
     'PhluxTransactionQuery' => 'applications/phlux/query/PhluxTransactionQuery.php',
     'PhluxVariable' => 'applications/phlux/storage/PhluxVariable.php',
     'PhluxVariableEditor' => 'applications/phlux/editor/PhluxVariableEditor.php',
     'PhluxVariableQuery' => 'applications/phlux/query/PhluxVariableQuery.php',
     'PhluxViewController' => 'applications/phlux/controller/PhluxViewController.php',
     'PholioConstants' => 'applications/pholio/constants/PholioConstants.php',
     'PholioController' => 'applications/pholio/controller/PholioController.php',
     'PholioDAO' => 'applications/pholio/storage/PholioDAO.php',
     'PholioImage' => 'applications/pholio/storage/PholioImage.php',
     'PholioImageHistoryController' => 'applications/pholio/controller/PholioImageHistoryController.php',
     'PholioImageQuery' => 'applications/pholio/query/PholioImageQuery.php',
     'PholioImageUploadController' => 'applications/pholio/controller/PholioImageUploadController.php',
     'PholioInlineCommentEditView' => 'applications/pholio/view/PholioInlineCommentEditView.php',
     'PholioInlineCommentSaveView' => 'applications/pholio/view/PholioInlineCommentSaveView.php',
     'PholioInlineCommentView' => 'applications/pholio/view/PholioInlineCommentView.php',
     'PholioInlineController' => 'applications/pholio/controller/PholioInlineController.php',
     'PholioInlineDeleteController' => 'applications/pholio/controller/PholioInlineDeleteController.php',
     'PholioInlineEditController' => 'applications/pholio/controller/PholioInlineEditController.php',
     'PholioInlineSaveController' => 'applications/pholio/controller/PholioInlineSaveController.php',
     'PholioInlineThumbController' => 'applications/pholio/controller/PholioInlineThumbController.php',
     'PholioInlineViewController' => 'applications/pholio/controller/PholioInlineViewController.php',
     'PholioMock' => 'applications/pholio/storage/PholioMock.php',
     'PholioMockCommentController' => 'applications/pholio/controller/PholioMockCommentController.php',
     'PholioMockEditController' => 'applications/pholio/controller/PholioMockEditController.php',
     'PholioMockEditor' => 'applications/pholio/editor/PholioMockEditor.php',
     'PholioMockEmbedView' => 'applications/pholio/view/PholioMockEmbedView.php',
     'PholioMockImagesView' => 'applications/pholio/view/PholioMockImagesView.php',
     'PholioMockListController' => 'applications/pholio/controller/PholioMockListController.php',
     'PholioMockMailReceiver' => 'applications/pholio/mail/PholioMockMailReceiver.php',
     'PholioMockQuery' => 'applications/pholio/query/PholioMockQuery.php',
     'PholioMockSearchEngine' => 'applications/pholio/query/PholioMockSearchEngine.php',
     'PholioMockViewController' => 'applications/pholio/controller/PholioMockViewController.php',
     'PholioPHIDTypeImage' => 'applications/pholio/phid/PholioPHIDTypeImage.php',
     'PholioPHIDTypeMock' => 'applications/pholio/phid/PholioPHIDTypeMock.php',
     'PholioRemarkupRule' => 'applications/pholio/remarkup/PholioRemarkupRule.php',
     'PholioReplyHandler' => 'applications/pholio/mail/PholioReplyHandler.php',
     'PholioSearchIndexer' => 'applications/pholio/search/PholioSearchIndexer.php',
     'PholioTransaction' => 'applications/pholio/storage/PholioTransaction.php',
     'PholioTransactionComment' => 'applications/pholio/storage/PholioTransactionComment.php',
     'PholioTransactionQuery' => 'applications/pholio/query/PholioTransactionQuery.php',
     'PholioTransactionType' => 'applications/pholio/constants/PholioTransactionType.php',
     'PholioTransactionView' => 'applications/pholio/view/PholioTransactionView.php',
     'PholioUploadedImageView' => 'applications/pholio/view/PholioUploadedImageView.php',
     'PhortuneAccount' => 'applications/phortune/storage/PhortuneAccount.php',
     'PhortuneAccountBuyController' => 'applications/phortune/controller/PhortuneAccountBuyController.php',
     'PhortuneAccountEditor' => 'applications/phortune/editor/PhortuneAccountEditor.php',
     'PhortuneAccountQuery' => 'applications/phortune/query/PhortuneAccountQuery.php',
     'PhortuneAccountTransaction' => 'applications/phortune/storage/PhortuneAccountTransaction.php',
     'PhortuneAccountTransactionQuery' => 'applications/phortune/query/PhortuneAccountTransactionQuery.php',
     'PhortuneAccountViewController' => 'applications/phortune/controller/PhortuneAccountViewController.php',
     'PhortuneBalancedPaymentProvider' => 'applications/phortune/provider/PhortuneBalancedPaymentProvider.php',
     'PhortuneCart' => 'applications/phortune/storage/PhortuneCart.php',
     'PhortuneCharge' => 'applications/phortune/storage/PhortuneCharge.php',
     'PhortuneConstants' => 'applications/phortune/constants/PhortuneConstants.php',
     'PhortuneController' => 'applications/phortune/controller/PhortuneController.php',
     'PhortuneCreditCardForm' => 'applications/phortune/view/PhortuneCreditCardForm.php',
     'PhortuneCurrency' => 'applications/phortune/currency/PhortuneCurrency.php',
     'PhortuneCurrencyTestCase' => 'applications/phortune/currency/__tests__/PhortuneCurrencyTestCase.php',
     'PhortuneDAO' => 'applications/phortune/storage/PhortuneDAO.php',
     'PhortuneErrCode' => 'applications/phortune/constants/PhortuneErrCode.php',
     'PhortuneLandingController' => 'applications/phortune/controller/PhortuneLandingController.php',
     'PhortuneMonthYearExpiryControl' => 'applications/phortune/control/PhortuneMonthYearExpiryControl.php',
     'PhortuneMultiplePaymentProvidersException' => 'applications/phortune/exception/PhortuneMultiplePaymentProvidersException.php',
     'PhortuneNoPaymentProviderException' => 'applications/phortune/exception/PhortuneNoPaymentProviderException.php',
     'PhortuneNotImplementedException' => 'applications/phortune/exception/PhortuneNotImplementedException.php',
     'PhortunePaymentMethod' => 'applications/phortune/storage/PhortunePaymentMethod.php',
     'PhortunePaymentMethodEditController' => 'applications/phortune/controller/PhortunePaymentMethodEditController.php',
     'PhortunePaymentMethodListController' => 'applications/phortune/controller/PhortunePaymentMethodListController.php',
     'PhortunePaymentMethodQuery' => 'applications/phortune/query/PhortunePaymentMethodQuery.php',
     'PhortunePaymentMethodViewController' => 'applications/phortune/controller/PhortunePaymentMethodViewController.php',
     'PhortunePaymentProvider' => 'applications/phortune/provider/PhortunePaymentProvider.php',
     'PhortunePaymentProviderTestCase' => 'applications/phortune/provider/__tests__/PhortunePaymentProviderTestCase.php',
     'PhortunePaypalPaymentProvider' => 'applications/phortune/provider/PhortunePaypalPaymentProvider.php',
     'PhortuneProduct' => 'applications/phortune/storage/PhortuneProduct.php',
     'PhortuneProductEditController' => 'applications/phortune/controller/PhortuneProductEditController.php',
     'PhortuneProductEditor' => 'applications/phortune/editor/PhortuneProductEditor.php',
     'PhortuneProductListController' => 'applications/phortune/controller/PhortuneProductListController.php',
     'PhortuneProductQuery' => 'applications/phortune/query/PhortuneProductQuery.php',
     'PhortuneProductTransaction' => 'applications/phortune/storage/PhortuneProductTransaction.php',
     'PhortuneProductTransactionQuery' => 'applications/phortune/query/PhortuneProductTransactionQuery.php',
     'PhortuneProductViewController' => 'applications/phortune/controller/PhortuneProductViewController.php',
     'PhortuneProviderController' => 'applications/phortune/controller/PhortuneProviderController.php',
     'PhortunePurchase' => 'applications/phortune/storage/PhortunePurchase.php',
     'PhortuneStripePaymentProvider' => 'applications/phortune/provider/PhortuneStripePaymentProvider.php',
     'PhortuneTestExtraPaymentProvider' => 'applications/phortune/provider/__tests__/PhortuneTestExtraPaymentProvider.php',
     'PhortuneTestPaymentProvider' => 'applications/phortune/provider/PhortuneTestPaymentProvider.php',
     'PhortuneWePayPaymentProvider' => 'applications/phortune/provider/PhortuneWePayPaymentProvider.php',
     'PhrequentController' => 'applications/phrequent/controller/PhrequentController.php',
     'PhrequentDAO' => 'applications/phrequent/storage/PhrequentDAO.php',
     'PhrequentListController' => 'applications/phrequent/controller/PhrequentListController.php',
     'PhrequentTrackController' => 'applications/phrequent/controller/PhrequentTrackController.php',
     'PhrequentTrackableInterface' => 'applications/phrequent/interface/PhrequentTrackableInterface.php',
     'PhrequentUIEventListener' => 'applications/phrequent/event/PhrequentUIEventListener.php',
     'PhrequentUserTime' => 'applications/phrequent/storage/PhrequentUserTime.php',
     'PhrequentUserTimeQuery' => 'applications/phrequent/query/PhrequentUserTimeQuery.php',
     'PhrictionActionConstants' => 'applications/phriction/constants/PhrictionActionConstants.php',
     'PhrictionActionMenuEventListener' => 'applications/phriction/event/PhrictionActionMenuEventListener.php',
     'PhrictionChangeType' => 'applications/phriction/constants/PhrictionChangeType.php',
     'PhrictionConstants' => 'applications/phriction/constants/PhrictionConstants.php',
     'PhrictionContent' => 'applications/phriction/storage/PhrictionContent.php',
     'PhrictionController' => 'applications/phriction/controller/PhrictionController.php',
     'PhrictionDAO' => 'applications/phriction/storage/PhrictionDAO.php',
     'PhrictionDeleteController' => 'applications/phriction/controller/PhrictionDeleteController.php',
     'PhrictionDiffController' => 'applications/phriction/controller/PhrictionDiffController.php',
     'PhrictionDocument' => 'applications/phriction/storage/PhrictionDocument.php',
     'PhrictionDocumentController' => 'applications/phriction/controller/PhrictionDocumentController.php',
     'PhrictionDocumentEditor' => 'applications/phriction/editor/PhrictionDocumentEditor.php',
     'PhrictionDocumentPreviewController' => 'applications/phriction/controller/PhrictionDocumentPreviewController.php',
     'PhrictionDocumentQuery' => 'applications/phriction/query/PhrictionDocumentQuery.php',
     'PhrictionDocumentStatus' => 'applications/phriction/constants/PhrictionDocumentStatus.php',
     'PhrictionDocumentTestCase' => 'applications/phriction/storage/__tests__/PhrictionDocumentTestCase.php',
     'PhrictionEditController' => 'applications/phriction/controller/PhrictionEditController.php',
     'PhrictionHistoryController' => 'applications/phriction/controller/PhrictionHistoryController.php',
     'PhrictionListController' => 'applications/phriction/controller/PhrictionListController.php',
     'PhrictionMoveController' => 'applications/phriction/controller/PhrictionMoveController.php',
     'PhrictionNewController' => 'applications/phriction/controller/PhrictionNewController.php',
     'PhrictionPHIDTypeDocument' => 'applications/phriction/phid/PhrictionPHIDTypeDocument.php',
     'PhrictionRemarkupRule' => 'applications/phriction/remarkup/PhrictionRemarkupRule.php',
     'PhrictionSearchEngine' => 'applications/phriction/query/PhrictionSearchEngine.php',
     'PhrictionSearchIndexer' => 'applications/phriction/search/PhrictionSearchIndexer.php',
     'PonderAddAnswerView' => 'applications/ponder/view/PonderAddAnswerView.php',
     'PonderAnswer' => 'applications/ponder/storage/PonderAnswer.php',
     'PonderAnswerCommentController' => 'applications/ponder/controller/PonderAnswerCommentController.php',
     'PonderAnswerEditController' => 'applications/ponder/controller/PonderAnswerEditController.php',
     'PonderAnswerEditor' => 'applications/ponder/editor/PonderAnswerEditor.php',
     'PonderAnswerHistoryController' => 'applications/ponder/controller/PonderAnswerHistoryController.php',
     'PonderAnswerQuery' => 'applications/ponder/query/PonderAnswerQuery.php',
     'PonderAnswerSaveController' => 'applications/ponder/controller/PonderAnswerSaveController.php',
     'PonderAnswerTransaction' => 'applications/ponder/storage/PonderAnswerTransaction.php',
     'PonderAnswerTransactionComment' => 'applications/ponder/storage/PonderAnswerTransactionComment.php',
     'PonderAnswerTransactionQuery' => 'applications/ponder/query/PonderAnswerTransactionQuery.php',
     'PonderAnswerViewController' => 'applications/ponder/controller/PonderAnswerViewController.php',
     'PonderComment' => 'applications/ponder/storage/PonderComment.php',
     'PonderCommentQuery' => 'applications/ponder/query/PonderCommentQuery.php',
     'PonderConstants' => 'applications/ponder/constants/PonderConstants.php',
     'PonderController' => 'applications/ponder/controller/PonderController.php',
     'PonderDAO' => 'applications/ponder/storage/PonderDAO.php',
     'PonderPHIDTypeAnswer' => 'applications/ponder/phid/PonderPHIDTypeAnswer.php',
     'PonderPHIDTypeQuestion' => 'applications/ponder/phid/PonderPHIDTypeQuestion.php',
     'PonderQuestion' => 'applications/ponder/storage/PonderQuestion.php',
     'PonderQuestionCommentController' => 'applications/ponder/controller/PonderQuestionCommentController.php',
     'PonderQuestionEditController' => 'applications/ponder/controller/PonderQuestionEditController.php',
     'PonderQuestionEditor' => 'applications/ponder/editor/PonderQuestionEditor.php',
     'PonderQuestionHistoryController' => 'applications/ponder/controller/PonderQuestionHistoryController.php',
     'PonderQuestionListController' => 'applications/ponder/controller/PonderQuestionListController.php',
     'PonderQuestionMailReceiver' => 'applications/ponder/mail/PonderQuestionMailReceiver.php',
     'PonderQuestionQuery' => 'applications/ponder/query/PonderQuestionQuery.php',
     'PonderQuestionReplyHandler' => 'applications/ponder/mail/PonderQuestionReplyHandler.php',
     'PonderQuestionSearchEngine' => 'applications/ponder/query/PonderQuestionSearchEngine.php',
     'PonderQuestionStatus' => 'applications/ponder/constants/PonderQuestionStatus.php',
     'PonderQuestionStatusController' => 'applications/ponder/controller/PonderQuestionStatusController.php',
     'PonderQuestionTransaction' => 'applications/ponder/storage/PonderQuestionTransaction.php',
     'PonderQuestionTransactionComment' => 'applications/ponder/storage/PonderQuestionTransactionComment.php',
     'PonderQuestionTransactionQuery' => 'applications/ponder/query/PonderQuestionTransactionQuery.php',
     'PonderQuestionViewController' => 'applications/ponder/controller/PonderQuestionViewController.php',
     'PonderRemarkupRule' => 'applications/ponder/remarkup/PonderRemarkupRule.php',
     'PonderSearchIndexer' => 'applications/ponder/search/PonderSearchIndexer.php',
     'PonderVotableInterface' => 'applications/ponder/storage/PonderVotableInterface.php',
     'PonderVotableView' => 'applications/ponder/view/PonderVotableView.php',
     'PonderVote' => 'applications/ponder/constants/PonderVote.php',
     'PonderVoteEditor' => 'applications/ponder/editor/PonderVoteEditor.php',
     'PonderVoteSaveController' => 'applications/ponder/controller/PonderVoteSaveController.php',
     'ProjectRemarkupRule' => 'applications/project/remarkup/ProjectRemarkupRule.php',
     'QueryFormattingTestCase' => 'infrastructure/storage/__tests__/QueryFormattingTestCase.php',
     'ReleephAuthorFieldSpecification' => 'applications/releeph/field/specification/ReleephAuthorFieldSpecification.php',
     'ReleephBranch' => 'applications/releeph/storage/ReleephBranch.php',
     'ReleephBranchAccessController' => 'applications/releeph/controller/branch/ReleephBranchAccessController.php',
     'ReleephBranchCommitFieldSpecification' => 'applications/releeph/field/specification/ReleephBranchCommitFieldSpecification.php',
     'ReleephBranchCreateController' => 'applications/releeph/controller/branch/ReleephBranchCreateController.php',
     'ReleephBranchEditController' => 'applications/releeph/controller/branch/ReleephBranchEditController.php',
     'ReleephBranchEditor' => 'applications/releeph/editor/ReleephBranchEditor.php',
     'ReleephBranchHistoryController' => 'applications/releeph/controller/branch/ReleephBranchHistoryController.php',
     'ReleephBranchNamePreviewController' => 'applications/releeph/controller/branch/ReleephBranchNamePreviewController.php',
     'ReleephBranchPreviewView' => 'applications/releeph/view/branch/ReleephBranchPreviewView.php',
     'ReleephBranchQuery' => 'applications/releeph/query/ReleephBranchQuery.php',
     'ReleephBranchSearchEngine' => 'applications/releeph/query/ReleephBranchSearchEngine.php',
     'ReleephBranchTemplate' => 'applications/releeph/view/branch/ReleephBranchTemplate.php',
     'ReleephBranchTransaction' => 'applications/releeph/storage/ReleephBranchTransaction.php',
     'ReleephBranchTransactionQuery' => 'applications/releeph/query/ReleephBranchTransactionQuery.php',
     'ReleephBranchViewController' => 'applications/releeph/controller/branch/ReleephBranchViewController.php',
     'ReleephCommitFinder' => 'applications/releeph/commitfinder/ReleephCommitFinder.php',
     'ReleephCommitFinderException' => 'applications/releeph/commitfinder/ReleephCommitFinderException.php',
     'ReleephCommitMessageFieldSpecification' => 'applications/releeph/field/specification/ReleephCommitMessageFieldSpecification.php',
     'ReleephController' => 'applications/releeph/controller/ReleephController.php',
     'ReleephDAO' => 'applications/releeph/storage/ReleephDAO.php',
     'ReleephDefaultFieldSelector' => 'applications/releeph/field/selector/ReleephDefaultFieldSelector.php',
     'ReleephDefaultUserView' => 'applications/releeph/view/user/ReleephDefaultUserView.php',
     'ReleephDiffChurnFieldSpecification' => 'applications/releeph/field/specification/ReleephDiffChurnFieldSpecification.php',
     'ReleephDiffMessageFieldSpecification' => 'applications/releeph/field/specification/ReleephDiffMessageFieldSpecification.php',
     'ReleephDiffSizeFieldSpecification' => 'applications/releeph/field/specification/ReleephDiffSizeFieldSpecification.php',
     'ReleephDifferentialRevisionDetailRenderer' => 'applications/releeph/differential/ReleephDifferentialRevisionDetailRenderer.php',
     'ReleephFieldParseException' => 'applications/releeph/field/exception/ReleephFieldParseException.php',
     'ReleephFieldSelector' => 'applications/releeph/field/selector/ReleephFieldSelector.php',
     'ReleephFieldSpecification' => 'applications/releeph/field/specification/ReleephFieldSpecification.php',
     'ReleephIntentFieldSpecification' => 'applications/releeph/field/specification/ReleephIntentFieldSpecification.php',
     'ReleephLevelFieldSpecification' => 'applications/releeph/field/specification/ReleephLevelFieldSpecification.php',
     'ReleephOriginalCommitFieldSpecification' => 'applications/releeph/field/specification/ReleephOriginalCommitFieldSpecification.php',
     'ReleephPHIDTypeBranch' => 'applications/releeph/phid/ReleephPHIDTypeBranch.php',
     'ReleephPHIDTypeProject' => 'applications/releeph/phid/ReleephPHIDTypeProject.php',
     'ReleephPHIDTypeRequest' => 'applications/releeph/phid/ReleephPHIDTypeRequest.php',
     'ReleephProject' => 'applications/releeph/storage/ReleephProject.php',
     'ReleephProjectActionController' => 'applications/releeph/controller/project/ReleephProjectActionController.php',
     'ReleephProjectController' => 'applications/releeph/controller/ReleephProjectController.php',
     'ReleephProjectCreateController' => 'applications/releeph/controller/project/ReleephProjectCreateController.php',
     'ReleephProjectEditController' => 'applications/releeph/controller/project/ReleephProjectEditController.php',
     'ReleephProjectHistoryController' => 'applications/releeph/controller/project/ReleephProjectHistoryController.php',
     'ReleephProjectListController' => 'applications/releeph/controller/project/ReleephProjectListController.php',
     'ReleephProjectQuery' => 'applications/releeph/query/ReleephProjectQuery.php',
     'ReleephProjectSearchEngine' => 'applications/releeph/query/ReleephProjectSearchEngine.php',
     'ReleephProjectTransaction' => 'applications/releeph/storage/ReleephProjectTransaction.php',
     'ReleephProjectTransactionQuery' => 'applications/releeph/query/ReleephProjectTransactionQuery.php',
     'ReleephProjectViewController' => 'applications/releeph/controller/project/ReleephProjectViewController.php',
     'ReleephReasonFieldSpecification' => 'applications/releeph/field/specification/ReleephReasonFieldSpecification.php',
     'ReleephRequest' => 'applications/releeph/storage/ReleephRequest.php',
     'ReleephRequestActionController' => 'applications/releeph/controller/request/ReleephRequestActionController.php',
     'ReleephRequestCommentController' => 'applications/releeph/controller/request/ReleephRequestCommentController.php',
     'ReleephRequestDifferentialCreateController' => 'applications/releeph/controller/request/ReleephRequestDifferentialCreateController.php',
     'ReleephRequestEditController' => 'applications/releeph/controller/request/ReleephRequestEditController.php',
     'ReleephRequestHeaderListView' => 'applications/releeph/view/request/header/ReleephRequestHeaderListView.php',
     'ReleephRequestHeaderView' => 'applications/releeph/view/request/header/ReleephRequestHeaderView.php',
     'ReleephRequestIntentsView' => 'applications/releeph/view/request/ReleephRequestIntentsView.php',
     'ReleephRequestMailReceiver' => 'applications/releeph/mail/ReleephRequestMailReceiver.php',
     'ReleephRequestQuery' => 'applications/releeph/query/ReleephRequestQuery.php',
     'ReleephRequestReplyHandler' => 'applications/releeph/mail/ReleephRequestReplyHandler.php',
     'ReleephRequestSearchEngine' => 'applications/releeph/query/ReleephRequestSearchEngine.php',
     'ReleephRequestStatus' => 'applications/releeph/constants/ReleephRequestStatus.php',
     'ReleephRequestStatusView' => 'applications/releeph/view/request/ReleephRequestStatusView.php',
     'ReleephRequestTransaction' => 'applications/releeph/storage/ReleephRequestTransaction.php',
     'ReleephRequestTransactionComment' => 'applications/releeph/storage/ReleephRequestTransactionComment.php',
     'ReleephRequestTransactionQuery' => 'applications/releeph/query/ReleephRequestTransactionQuery.php',
     'ReleephRequestTransactionalEditor' => 'applications/releeph/editor/ReleephRequestTransactionalEditor.php',
     'ReleephRequestTypeaheadControl' => 'applications/releeph/view/request/ReleephRequestTypeaheadControl.php',
     'ReleephRequestTypeaheadController' => 'applications/releeph/controller/request/ReleephRequestTypeaheadController.php',
     'ReleephRequestViewController' => 'applications/releeph/controller/request/ReleephRequestViewController.php',
     'ReleephRequestorFieldSpecification' => 'applications/releeph/field/specification/ReleephRequestorFieldSpecification.php',
     'ReleephRevisionFieldSpecification' => 'applications/releeph/field/specification/ReleephRevisionFieldSpecification.php',
     'ReleephSeverityFieldSpecification' => 'applications/releeph/field/specification/ReleephSeverityFieldSpecification.php',
     'ReleephStatusFieldSpecification' => 'applications/releeph/field/specification/ReleephStatusFieldSpecification.php',
     'ReleephSummaryFieldSpecification' => 'applications/releeph/field/specification/ReleephSummaryFieldSpecification.php',
     'ReleephUserView' => 'applications/releeph/view/user/ReleephUserView.php',
     'SlowvoteEmbedView' => 'applications/slowvote/view/SlowvoteEmbedView.php',
     'SlowvoteRemarkupRule' => 'applications/slowvote/remarkup/SlowvoteRemarkupRule.php',
   ),
   'function' =>
   array(
     '_phabricator_date_format' => 'view/viewutils.php',
     'celerity_generate_unique_node_id' => 'infrastructure/celerity/api.php',
     'celerity_get_resource_uri' => 'infrastructure/celerity/api.php',
     'celerity_register_resource_map' => 'infrastructure/celerity/map.php',
     'implode_selected_handle_links' => 'applications/phid/handle/view/render.php',
     'javelin_tag' => 'infrastructure/javelin/markup.php',
     'phabricator_date' => 'view/viewutils.php',
     'phabricator_datetime' => 'view/viewutils.php',
     'phabricator_form' => 'infrastructure/javelin/markup.php',
     'phabricator_format_bytes' => 'view/viewutils.php',
     'phabricator_format_local_time' => 'view/viewutils.php',
     'phabricator_format_relative_time' => 'view/viewutils.php',
     'phabricator_format_relative_time_detailed' => 'view/viewutils.php',
     'phabricator_format_units_generic' => 'view/viewutils.php',
     'phabricator_on_relative_date' => 'view/viewutils.php',
     'phabricator_parse_bytes' => 'view/viewutils.php',
     'phabricator_relative_date' => 'view/viewutils.php',
     'phabricator_time' => 'view/viewutils.php',
     'phid_get_subtype' => 'applications/phid/utils.php',
     'phid_get_type' => 'applications/phid/utils.php',
     'phid_group_by_type' => 'applications/phid/utils.php',
     'require_celerity_resource' => 'infrastructure/celerity/api.php',
   ),
   'xmap' =>
   array(
     'Aphront304Response' => 'AphrontResponse',
     'Aphront400Response' => 'AphrontResponse',
     'Aphront403Response' => 'AphrontHTMLResponse',
     'Aphront404Response' => 'AphrontHTMLResponse',
     'AphrontAbstractAttachedFileView' => 'AphrontView',
     'AphrontAjaxResponse' => 'AphrontResponse',
     'AphrontBarView' => 'AphrontView',
     'AphrontCSRFException' => 'AphrontException',
     'AphrontCalendarEventView' => 'AphrontView',
     'AphrontCalendarMonthView' => 'AphrontView',
     'AphrontContextBarView' => 'AphrontView',
     'AphrontController' => 'Phobject',
     'AphrontCursorPagerView' => 'AphrontView',
     'AphrontDefaultApplicationConfiguration' => 'AphrontApplicationConfiguration',
     'AphrontDialogResponse' => 'AphrontResponse',
     'AphrontDialogView' => 'AphrontView',
     'AphrontErrorView' => 'AphrontView',
     'AphrontException' => 'Exception',
     'AphrontFileResponse' => 'AphrontResponse',
     'AphrontFormCheckboxControl' => 'AphrontFormControl',
     'AphrontFormControl' => 'AphrontView',
     'AphrontFormCropControl' => 'AphrontFormControl',
     'AphrontFormDateControl' => 'AphrontFormControl',
     'AphrontFormDividerControl' => 'AphrontFormControl',
     'AphrontFormFileControl' => 'AphrontFormControl',
     'AphrontFormImageControl' => 'AphrontFormControl',
     'AphrontFormInsetView' => 'AphrontView',
-    'AphrontFormLayoutView' => 'AphrontView',
     'AphrontFormMarkupControl' => 'AphrontFormControl',
     'AphrontFormPasswordControl' => 'AphrontFormControl',
     'AphrontFormPolicyControl' => 'AphrontFormControl',
     'AphrontFormRadioButtonControl' => 'AphrontFormControl',
     'AphrontFormRecaptchaControl' => 'AphrontFormControl',
     'AphrontFormSelectControl' => 'AphrontFormControl',
     'AphrontFormStaticControl' => 'AphrontFormControl',
     'AphrontFormSubmitControl' => 'AphrontFormControl',
     'AphrontFormTextAreaControl' => 'AphrontFormControl',
     'AphrontFormTextControl' => 'AphrontFormControl',
     'AphrontFormToggleButtonsControl' => 'AphrontFormControl',
     'AphrontFormTokenizerControl' => 'AphrontFormControl',
     'AphrontFormView' => 'AphrontView',
     'AphrontGlyphBarView' => 'AphrontBarView',
     'AphrontHTMLResponse' => 'AphrontResponse',
     'AphrontHTTPSinkTestCase' => 'PhabricatorTestCase',
     'AphrontIsolatedDatabaseConnectionTestCase' => 'PhabricatorTestCase',
     'AphrontIsolatedHTTPSink' => 'AphrontHTTPSink',
     'AphrontJSONResponse' => 'AphrontResponse',
     'AphrontJavelinView' => 'AphrontView',
     'AphrontKeyboardShortcutsAvailableView' => 'AphrontView',
     'AphrontListFilterView' => 'AphrontView',
     'AphrontMiniPanelView' => 'AphrontView',
     'AphrontMoreView' => 'AphrontView',
     'AphrontMultiColumnView' => 'AphrontView',
     'AphrontMySQLDatabaseConnectionTestCase' => 'PhabricatorTestCase',
     'AphrontNoteView' => 'AphrontView',
     'AphrontNullView' => 'AphrontView',
     'AphrontPHPHTTPSink' => 'AphrontHTTPSink',
     'AphrontPageView' => 'AphrontView',
     'AphrontPagerView' => 'AphrontView',
     'AphrontPanelView' => 'AphrontView',
     'AphrontPlainTextResponse' => 'AphrontResponse',
     'AphrontProgressBarView' => 'AphrontBarView',
     'AphrontProxyResponse' => 'AphrontResponse',
     'AphrontRedirectException' => 'AphrontException',
     'AphrontRedirectResponse' => 'AphrontResponse',
     'AphrontReloadResponse' => 'AphrontRedirectResponse',
     'AphrontRequestFailureView' => 'AphrontView',
     'AphrontRequestTestCase' => 'PhabricatorTestCase',
     'AphrontSideNavFilterView' => 'AphrontView',
     'AphrontTableView' => 'AphrontView',
     'AphrontTagView' => 'AphrontView',
     'AphrontTokenizerTemplateView' => 'AphrontView',
     'AphrontTwoColumnView' => 'AphrontView',
     'AphrontTypeaheadTemplateView' => 'AphrontView',
     'AphrontUsageException' => 'AphrontException',
     'AphrontView' =>
     array(
       0 => 'Phobject',
       1 => 'PhutilSafeHTMLProducerInterface',
     ),
     'AphrontWebpageResponse' => 'AphrontHTMLResponse',
     'AuditPeopleMenuEventListener' => 'PhutilEventListener',
     'CelerityPhabricatorResourceController' => 'CelerityResourceController',
     'CelerityResourceController' => 'PhabricatorController',
     'CelerityResourceGraph' => 'AbstractDirectedGraph',
     'CelerityResourceTransformerTestCase' => 'PhabricatorTestCase',
     'ConduitAPIMethod' =>
     array(
       0 => 'Phobject',
       1 => 'PhabricatorPolicyInterface',
     ),
     'ConduitAPI_arcanist_Method' => 'ConduitAPIMethod',
     'ConduitAPI_arcanist_projectinfo_Method' => 'ConduitAPI_arcanist_Method',
     'ConduitAPI_audit_Method' => 'ConduitAPIMethod',
     'ConduitAPI_audit_query_Method' => 'ConduitAPI_audit_Method',
     'ConduitAPI_chatlog_Method' => 'ConduitAPIMethod',
     'ConduitAPI_chatlog_query_Method' => 'ConduitAPI_chatlog_Method',
     'ConduitAPI_chatlog_record_Method' => 'ConduitAPI_chatlog_Method',
     'ConduitAPI_conduit_connect_Method' => 'ConduitAPIMethod',
     'ConduitAPI_conduit_getcertificate_Method' => 'ConduitAPIMethod',
     'ConduitAPI_conduit_ping_Method' => 'ConduitAPIMethod',
     'ConduitAPI_conduit_query_Method' => 'ConduitAPIMethod',
     'ConduitAPI_conpherence_Method' => 'ConduitAPIMethod',
     'ConduitAPI_conpherence_createthread_Method' => 'ConduitAPI_conpherence_Method',
     'ConduitAPI_conpherence_querythread_Method' => 'ConduitAPI_conpherence_Method',
     'ConduitAPI_conpherence_querytransaction_Method' => 'ConduitAPI_conpherence_Method',
     'ConduitAPI_conpherence_updatethread_Method' => 'ConduitAPI_conpherence_Method',
     'ConduitAPI_differential_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_close_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_createcomment_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_creatediff_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_createinline_Method' => 'ConduitAPI_differential_Method',
     'ConduitAPI_differential_createrawdiff_Method' => 'ConduitAPI_differential_Method',
     'ConduitAPI_differential_createrevision_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_find_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_finishpostponedlinters_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_getalldiffs_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_getcommitmessage_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_getcommitpaths_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_getdiff_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_getrevision_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_getrevisioncomments_Method' => 'ConduitAPI_differential_Method',
     'ConduitAPI_differential_markcommitted_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_parsecommitmessage_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_query_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_setdiffproperty_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_updaterevision_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_updateunitresults_Method' => 'ConduitAPIMethod',
     'ConduitAPI_diffusion_Method' => 'ConduitAPIMethod',
     'ConduitAPI_diffusion_abstractquery_Method' => 'ConduitAPI_diffusion_Method',
     'ConduitAPI_diffusion_branchquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
     'ConduitAPI_diffusion_browsequery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
     'ConduitAPI_diffusion_commitbranchesquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
     'ConduitAPI_diffusion_commitparentsquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
     'ConduitAPI_diffusion_diffquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
     'ConduitAPI_diffusion_existsquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
     'ConduitAPI_diffusion_expandshortcommitquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
     'ConduitAPI_diffusion_filecontentquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
     'ConduitAPI_diffusion_findsymbols_Method' => 'ConduitAPI_diffusion_Method',
     'ConduitAPI_diffusion_getcommits_Method' => 'ConduitAPI_diffusion_Method',
     'ConduitAPI_diffusion_getlintmessages_Method' => 'ConduitAPI_diffusion_Method',
     'ConduitAPI_diffusion_getrecentcommitsbypath_Method' => 'ConduitAPI_diffusion_Method',
     'ConduitAPI_diffusion_historyquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
     'ConduitAPI_diffusion_lastmodifiedquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
     'ConduitAPI_diffusion_mergedcommitsquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
     'ConduitAPI_diffusion_rawdiffquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
     'ConduitAPI_diffusion_readmequery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
     'ConduitAPI_diffusion_refsquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
     'ConduitAPI_diffusion_searchquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
     'ConduitAPI_diffusion_stablecommitnamequery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
     'ConduitAPI_diffusion_tagsquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
     'ConduitAPI_feed_Method' => 'ConduitAPIMethod',
     'ConduitAPI_feed_publish_Method' => 'ConduitAPI_feed_Method',
     'ConduitAPI_feed_query_Method' => 'ConduitAPI_feed_Method',
     'ConduitAPI_file_Method' => 'ConduitAPIMethod',
     'ConduitAPI_file_download_Method' => 'ConduitAPI_file_Method',
     'ConduitAPI_file_info_Method' => 'ConduitAPI_file_Method',
     'ConduitAPI_file_upload_Method' => 'ConduitAPI_file_Method',
     'ConduitAPI_file_uploadhash_Method' => 'ConduitAPI_file_Method',
     'ConduitAPI_flag_Method' => 'ConduitAPIMethod',
     'ConduitAPI_flag_delete_Method' => 'ConduitAPI_flag_Method',
     'ConduitAPI_flag_edit_Method' => 'ConduitAPI_flag_Method',
     'ConduitAPI_flag_query_Method' => 'ConduitAPI_flag_Method',
     'ConduitAPI_macro_Method' => 'ConduitAPIMethod',
     'ConduitAPI_macro_creatememe_Method' => 'ConduitAPI_macro_Method',
     'ConduitAPI_macro_query_Method' => 'ConduitAPI_macro_Method',
     'ConduitAPI_maniphest_Method' => 'ConduitAPIMethod',
     'ConduitAPI_maniphest_createtask_Method' => 'ConduitAPI_maniphest_Method',
     'ConduitAPI_maniphest_find_Method' => 'ConduitAPI_maniphest_query_Method',
     'ConduitAPI_maniphest_gettasktransactions_Method' => 'ConduitAPI_maniphest_Method',
     'ConduitAPI_maniphest_info_Method' => 'ConduitAPI_maniphest_Method',
     'ConduitAPI_maniphest_query_Method' => 'ConduitAPI_maniphest_Method',
     'ConduitAPI_maniphest_update_Method' => 'ConduitAPI_maniphest_Method',
     'ConduitAPI_owners_Method' => 'ConduitAPIMethod',
     'ConduitAPI_owners_query_Method' => 'ConduitAPI_owners_Method',
     'ConduitAPI_paste_Method' => 'ConduitAPIMethod',
     'ConduitAPI_paste_create_Method' => 'ConduitAPI_paste_Method',
     'ConduitAPI_paste_info_Method' => 'ConduitAPI_paste_Method',
     'ConduitAPI_paste_query_Method' => 'ConduitAPI_paste_Method',
     'ConduitAPI_phid_Method' => 'ConduitAPIMethod',
     'ConduitAPI_phid_info_Method' => 'ConduitAPI_phid_Method',
     'ConduitAPI_phid_lookup_Method' => 'ConduitAPI_phid_Method',
     'ConduitAPI_phid_query_Method' => 'ConduitAPI_phid_Method',
     'ConduitAPI_phpast_Method' => 'ConduitAPIMethod',
     'ConduitAPI_phpast_getast_Method' => 'ConduitAPI_phpast_Method',
     'ConduitAPI_phpast_version_Method' => 'ConduitAPI_phpast_Method',
     'ConduitAPI_phriction_Method' => 'ConduitAPIMethod',
     'ConduitAPI_phriction_edit_Method' => 'ConduitAPI_phriction_Method',
     'ConduitAPI_phriction_history_Method' => 'ConduitAPI_phriction_Method',
     'ConduitAPI_phriction_info_Method' => 'ConduitAPI_phriction_Method',
     'ConduitAPI_project_Method' => 'ConduitAPIMethod',
     'ConduitAPI_project_query_Method' => 'ConduitAPI_project_Method',
     'ConduitAPI_releeph_Method' => 'ConduitAPIMethod',
     'ConduitAPI_releeph_getbranches_Method' => 'ConduitAPI_releeph_Method',
     'ConduitAPI_releeph_projectinfo_Method' => 'ConduitAPI_releeph_Method',
     'ConduitAPI_releeph_queryrequests_Method' => 'ConduitAPI_releeph_Method',
     'ConduitAPI_releeph_request_Method' => 'ConduitAPI_releeph_Method',
     'ConduitAPI_releephwork_canpush_Method' => 'ConduitAPI_releeph_Method',
     'ConduitAPI_releephwork_getauthorinfo_Method' => 'ConduitAPI_releeph_Method',
     'ConduitAPI_releephwork_getbranch_Method' => 'ConduitAPI_releeph_Method',
     'ConduitAPI_releephwork_getbranchcommitmessage_Method' => 'ConduitAPI_releeph_Method',
     'ConduitAPI_releephwork_getcommitmessage_Method' => 'ConduitAPI_releeph_Method',
     'ConduitAPI_releephwork_getorigcommitmessage_Method' => 'ConduitAPI_releeph_Method',
     'ConduitAPI_releephwork_nextrequest_Method' => 'ConduitAPI_releeph_Method',
     'ConduitAPI_releephwork_record_Method' => 'ConduitAPI_releeph_Method',
     'ConduitAPI_releephwork_recordpickstatus_Method' => 'ConduitAPI_releeph_Method',
     'ConduitAPI_remarkup_process_Method' => 'ConduitAPIMethod',
     'ConduitAPI_repository_Method' => 'ConduitAPIMethod',
     'ConduitAPI_repository_create_Method' => 'ConduitAPI_repository_Method',
     'ConduitAPI_repository_query_Method' => 'ConduitAPI_repository_Method',
     'ConduitAPI_slowvote_Method' => 'ConduitAPIMethod',
     'ConduitAPI_slowvote_info_Method' => 'ConduitAPI_slowvote_Method',
     'ConduitAPI_token_Method' => 'ConduitAPIMethod',
     'ConduitAPI_token_give_Method' => 'ConduitAPI_token_Method',
     'ConduitAPI_token_given_Method' => 'ConduitAPI_token_Method',
     'ConduitAPI_token_query_Method' => 'ConduitAPI_token_Method',
     'ConduitAPI_user_Method' => 'ConduitAPIMethod',
     'ConduitAPI_user_addstatus_Method' => 'ConduitAPI_user_Method',
     'ConduitAPI_user_disable_Method' => 'ConduitAPI_user_Method',
     'ConduitAPI_user_enable_Method' => 'ConduitAPI_user_Method',
     'ConduitAPI_user_find_Method' => 'ConduitAPI_user_Method',
     'ConduitAPI_user_info_Method' => 'ConduitAPI_user_Method',
     'ConduitAPI_user_query_Method' => 'ConduitAPI_user_Method',
     'ConduitAPI_user_removestatus_Method' => 'ConduitAPI_user_Method',
     'ConduitAPI_user_whoami_Method' => 'ConduitAPI_user_Method',
     'ConduitCallTestCase' => 'PhabricatorTestCase',
     'ConduitException' => 'Exception',
     'ConduitSSHWorkflow' => 'PhabricatorSSHWorkflow',
     'ConpherenceConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'ConpherenceController' => 'PhabricatorController',
     'ConpherenceCreateThreadMailReceiver' => 'PhabricatorMailReceiver',
     'ConpherenceDAO' => 'PhabricatorLiskDAO',
     'ConpherenceEditor' => 'PhabricatorApplicationTransactionEditor',
     'ConpherenceFileWidgetView' => 'ConpherenceWidgetView',
     'ConpherenceHovercardEventListener' => 'PhutilEventListener',
     'ConpherenceLayoutView' => 'AphrontView',
     'ConpherenceListController' => 'ConpherenceController',
     'ConpherenceMenuItemView' => 'AphrontTagView',
     'ConpherenceNewController' => 'ConpherenceController',
     'ConpherenceNotificationPanelController' => 'ConpherenceController',
     'ConpherenceParticipant' => 'ConpherenceDAO',
     'ConpherenceParticipantCountQuery' => 'PhabricatorOffsetPagedQuery',
     'ConpherenceParticipantQuery' => 'PhabricatorOffsetPagedQuery',
     'ConpherenceParticipationStatus' => 'ConpherenceConstants',
     'ConpherencePeopleMenuEventListener' => 'PhutilEventListener',
     'ConpherencePeopleWidgetView' => 'ConpherenceWidgetView',
     'ConpherenceReplyHandler' => 'PhabricatorMailReplyHandler',
     'ConpherenceSettings' => 'ConpherenceConstants',
     'ConpherenceThread' =>
     array(
       0 => 'ConpherenceDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'ConpherenceThreadListView' => 'AphrontView',
     'ConpherenceThreadMailReceiver' => 'PhabricatorObjectMailReceiver',
     'ConpherenceThreadQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'ConpherenceTimeUtilTestCase' => 'PhabricatorTestCase',
     'ConpherenceTransaction' => 'PhabricatorApplicationTransaction',
     'ConpherenceTransactionComment' => 'PhabricatorApplicationTransactionComment',
     'ConpherenceTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
     'ConpherenceTransactionType' => 'ConpherenceConstants',
     'ConpherenceTransactionView' => 'AphrontView',
     'ConpherenceUpdateActions' => 'ConpherenceConstants',
     'ConpherenceUpdateController' => 'ConpherenceController',
     'ConpherenceViewController' => 'ConpherenceController',
     'ConpherenceWidgetController' => 'ConpherenceController',
     'ConpherenceWidgetView' => 'AphrontView',
     'DarkConsoleController' => 'PhabricatorController',
     'DarkConsoleDataController' => 'PhabricatorController',
     'DarkConsoleErrorLogPlugin' => 'DarkConsolePlugin',
     'DarkConsoleEventPlugin' => 'DarkConsolePlugin',
     'DarkConsoleEventPluginAPI' => 'PhutilEventListener',
     'DarkConsoleRequestPlugin' => 'DarkConsolePlugin',
     'DarkConsoleServicesPlugin' => 'DarkConsolePlugin',
     'DarkConsoleXHProfPlugin' => 'DarkConsolePlugin',
     'DefaultDatabaseConfigurationProvider' => 'DatabaseConfigurationProvider',
     'DifferentialActionHasNoEffectException' => 'DifferentialException',
     'DifferentialAddCommentView' => 'AphrontView',
     'DifferentialAffectedPath' => 'DifferentialDAO',
     'DifferentialApplyPatchFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialArcanistProjectFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialAsanaRepresentationFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialAuditorsFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialAuthorFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialAuxiliaryField' => 'DifferentialDAO',
     'DifferentialBlameRevisionFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialBranchFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialCCWelcomeMail' => 'DifferentialReviewRequestMail',
     'DifferentialCCsFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialChangeset' => 'DifferentialDAO',
     'DifferentialChangesetDetailView' => 'AphrontView',
     'DifferentialChangesetHTMLRenderer' => 'DifferentialChangesetRenderer',
     'DifferentialChangesetListView' => 'AphrontView',
     'DifferentialChangesetOneUpRenderer' => 'DifferentialChangesetHTMLRenderer',
     'DifferentialChangesetOneUpTestRenderer' => 'DifferentialChangesetTestRenderer',
     'DifferentialChangesetParserTestCase' => 'PhabricatorTestCase',
     'DifferentialChangesetTestRenderer' => 'DifferentialChangesetRenderer',
     'DifferentialChangesetTwoUpRenderer' => 'DifferentialChangesetHTMLRenderer',
     'DifferentialChangesetTwoUpTestRenderer' => 'DifferentialChangesetTestRenderer',
     'DifferentialChangesetViewController' => 'DifferentialController',
     'DifferentialComment' =>
     array(
       0 => 'DifferentialDAO',
       1 => 'PhabricatorMarkupInterface',
     ),
     'DifferentialCommentEditor' => 'PhabricatorEditor',
     'DifferentialCommentMail' => 'DifferentialMail',
     'DifferentialCommentPreviewController' => 'DifferentialController',
     'DifferentialCommentQuery' => 'PhabricatorOffsetPagedQuery',
     'DifferentialCommentSaveController' => 'DifferentialController',
     'DifferentialCommitsFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialConflictsFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialController' => 'PhabricatorController',
     'DifferentialDAO' => 'PhabricatorLiskDAO',
     'DifferentialDateCreatedFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialDateModifiedFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialDefaultFieldSelector' => 'DifferentialFieldSelector',
     'DifferentialDependenciesFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialDependsOnFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialDiff' =>
     array(
       0 => 'DifferentialDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'DifferentialDiffContentMail' => 'DifferentialMail',
     'DifferentialDiffCreateController' => 'DifferentialController',
     'DifferentialDiffProperty' => 'DifferentialDAO',
     'DifferentialDiffQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'DifferentialDiffTableOfContentsView' => 'AphrontView',
     'DifferentialDiffTestCase' => 'ArcanistPhutilTestCase',
     'DifferentialDiffViewController' => 'DifferentialController',
     'DifferentialDiffViewPolicyFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialDoorkeeperRevisionFeedStoryPublisher' => 'DoorkeeperFeedStoryPublisher',
     'DifferentialException' => 'Exception',
     'DifferentialExceptionMail' => 'DifferentialMail',
     'DifferentialExportPatchFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialFieldDataNotAvailableException' => 'Exception',
     'DifferentialFieldParseException' => 'Exception',
     'DifferentialFieldSpecificationIncompleteException' => 'Exception',
     'DifferentialFieldValidationException' => 'Exception',
     'DifferentialFreeformFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialFreeformFieldTestCase' => 'PhabricatorTestCase',
     'DifferentialGitSVNIDFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialHostFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialHovercardEventListener' => 'PhutilEventListener',
     'DifferentialHunk' => 'DifferentialDAO',
     'DifferentialHunkParserTestCase' => 'PhabricatorTestCase',
     'DifferentialHunkTestCase' => 'ArcanistPhutilTestCase',
     'DifferentialInlineComment' =>
     array(
       0 => 'DifferentialDAO',
       1 => 'PhabricatorInlineCommentInterface',
     ),
     'DifferentialInlineCommentEditController' => 'PhabricatorInlineCommentController',
     'DifferentialInlineCommentEditView' => 'AphrontView',
     'DifferentialInlineCommentPreviewController' => 'PhabricatorInlineCommentPreviewController',
     'DifferentialInlineCommentQuery' => 'PhabricatorOffsetPagedQuery',
     'DifferentialInlineCommentView' => 'AphrontView',
     'DifferentialLinesFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialLintFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialLocalCommitsView' => 'AphrontView',
     'DifferentialMail' => 'PhabricatorMail',
     'DifferentialManiphestTasksFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialNewDiffMail' => 'DifferentialReviewRequestMail',
     'DifferentialPHIDTypeRevision' => 'PhabricatorPHIDType',
     'DifferentialParseRenderTestCase' => 'PhabricatorTestCase',
     'DifferentialPathFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialPeopleMenuEventListener' => 'PhutilEventListener',
     'DifferentialPrimaryPaneView' => 'AphrontView',
     'DifferentialReleephRequestFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialRemarkupRule' => 'PhabricatorRemarkupRuleObject',
     'DifferentialReplyHandler' => 'PhabricatorMailReplyHandler',
     'DifferentialResultsTableView' => 'AphrontView',
     'DifferentialRevertPlanFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialReviewRequestMail' => 'DifferentialMail',
     'DifferentialReviewedByFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialReviewersFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialRevision' =>
     array(
       0 => 'DifferentialDAO',
       1 => 'PhabricatorTokenReceiverInterface',
       2 => 'PhabricatorPolicyInterface',
       3 => 'PhrequentTrackableInterface',
     ),
     'DifferentialRevisionCommentListView' => 'AphrontView',
     'DifferentialRevisionCommentView' => 'AphrontView',
     'DifferentialRevisionDetailView' => 'AphrontView',
     'DifferentialRevisionEditController' => 'DifferentialController',
     'DifferentialRevisionEditor' => 'PhabricatorEditor',
     'DifferentialRevisionIDFieldParserTestCase' => 'PhabricatorTestCase',
     'DifferentialRevisionIDFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialRevisionListController' =>
     array(
       0 => 'DifferentialController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'DifferentialRevisionListView' => 'AphrontView',
     'DifferentialRevisionMailReceiver' => 'PhabricatorObjectMailReceiver',
     'DifferentialRevisionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'DifferentialRevisionSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'DifferentialRevisionStatsView' => 'AphrontView',
     'DifferentialRevisionStatusFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialRevisionUpdateHistoryView' => 'AphrontView',
     'DifferentialRevisionViewController' => 'DifferentialController',
     'DifferentialSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
     'DifferentialSubscribeController' => 'DifferentialController',
     'DifferentialSummaryFieldSpecification' => 'DifferentialFreeformFieldSpecification',
     'DifferentialTestPlanFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialTitleFieldSpecification' => 'DifferentialFreeformFieldSpecification',
     'DifferentialTransaction' => 'PhabricatorApplicationTransaction',
     'DifferentialTransactionComment' => 'PhabricatorApplicationTransactionComment',
     'DifferentialUnitFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialViewPolicyFieldSpecification' => 'DifferentialFieldSpecification',
     'DiffusionBranchTableController' => 'DiffusionController',
     'DiffusionBranchTableView' => 'DiffusionView',
     'DiffusionBrowseController' => 'DiffusionController',
     'DiffusionBrowseFileController' => 'DiffusionController',
     'DiffusionBrowseTableView' => 'DiffusionView',
     'DiffusionChangeController' => 'DiffusionController',
     'DiffusionCommentListView' => 'AphrontView',
     'DiffusionCommentView' => 'AphrontView',
     'DiffusionCommitBranchesController' => 'DiffusionController',
     'DiffusionCommitChangeTableView' => 'DiffusionView',
     'DiffusionCommitController' => 'DiffusionController',
     'DiffusionCommitEditController' => 'DiffusionController',
     'DiffusionCommitParentsQuery' => 'DiffusionQuery',
     'DiffusionCommitQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'DiffusionCommitTagsController' => 'DiffusionController',
     'DiffusionController' => 'PhabricatorController',
     'DiffusionDiffController' => 'DiffusionController',
     'DiffusionDoorkeeperCommitFeedStoryPublisher' => 'DoorkeeperFeedStoryPublisher',
     'DiffusionEmptyResultView' => 'DiffusionView',
     'DiffusionExpandCommitQueryException' => 'Exception',
     'DiffusionExpandShortNameQuery' => 'DiffusionQuery',
     'DiffusionExternalController' => 'DiffusionController',
     'DiffusionFileContentQuery' => 'DiffusionQuery',
     'DiffusionGitBranchTestCase' => 'PhabricatorTestCase',
     'DiffusionGitCommitParentsQuery' => 'DiffusionCommitParentsQuery',
     'DiffusionGitExpandShortNameQuery' => 'DiffusionExpandShortNameQuery',
     'DiffusionGitFileContentQuery' => 'DiffusionFileContentQuery',
     'DiffusionGitRawDiffQuery' => 'DiffusionRawDiffQuery',
     'DiffusionGitRequest' => 'DiffusionRequest',
     'DiffusionGitStableCommitNameQuery' => 'DiffusionStableCommitNameQuery',
     'DiffusionHistoryController' => 'DiffusionController',
     'DiffusionHistoryTableView' => 'DiffusionView',
     'DiffusionHomeController' => 'DiffusionController',
     'DiffusionHovercardEventListener' => 'PhutilEventListener',
     'DiffusionInlineCommentController' => 'PhabricatorInlineCommentController',
     'DiffusionInlineCommentPreviewController' => 'PhabricatorInlineCommentPreviewController',
     'DiffusionLastModifiedController' => 'DiffusionController',
     'DiffusionLintController' => 'DiffusionController',
     'DiffusionLintDetailsController' => 'DiffusionController',
     'DiffusionMercurialCommitParentsQuery' => 'DiffusionCommitParentsQuery',
     'DiffusionMercurialExpandShortNameQuery' => 'DiffusionExpandShortNameQuery',
     'DiffusionMercurialFileContentQuery' => 'DiffusionFileContentQuery',
     'DiffusionMercurialRawDiffQuery' => 'DiffusionRawDiffQuery',
     'DiffusionMercurialRequest' => 'DiffusionRequest',
     'DiffusionMercurialStableCommitNameQuery' => 'DiffusionStableCommitNameQuery',
     'DiffusionPathCompleteController' => 'DiffusionController',
     'DiffusionPathQueryTestCase' => 'PhabricatorTestCase',
     'DiffusionPathValidateController' => 'DiffusionController',
     'DiffusionQuery' => 'PhabricatorQuery',
     'DiffusionRawDiffQuery' => 'DiffusionQuery',
     'DiffusionRemarkupRule' => 'PhabricatorRemarkupRuleObject',
     'DiffusionRepositoryController' => 'DiffusionController',
     'DiffusionRepositoryCreateController' => 'DiffusionController',
     'DiffusionRepositoryEditBasicController' => 'DiffusionController',
     'DiffusionRepositoryEditController' => 'DiffusionController',
     'DiffusionRepositoryEditEncodingController' => 'DiffusionController',
     'DiffusionSetupException' => 'AphrontUsageException',
     'DiffusionStableCommitNameQuery' => 'DiffusionQuery',
     'DiffusionSvnCommitParentsQuery' => 'DiffusionCommitParentsQuery',
     'DiffusionSvnFileContentQuery' => 'DiffusionFileContentQuery',
     'DiffusionSvnRawDiffQuery' => 'DiffusionRawDiffQuery',
     'DiffusionSvnRequest' => 'DiffusionRequest',
     'DiffusionSvnStableCommitNameQuery' => 'DiffusionStableCommitNameQuery',
     'DiffusionSymbolController' => 'DiffusionController',
     'DiffusionSymbolQuery' => 'PhabricatorOffsetPagedQuery',
     'DiffusionTagListController' => 'DiffusionController',
     'DiffusionTagListView' => 'DiffusionView',
     'DiffusionURITestCase' => 'ArcanistPhutilTestCase',
     'DiffusionView' => 'AphrontView',
     'DivinerArticleAtomizer' => 'DivinerAtomizer',
     'DivinerAtomCache' => 'DivinerDiskCache',
     'DivinerAtomController' => 'DivinerController',
     'DivinerAtomListController' =>
     array(
       0 => 'DivinerController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'DivinerAtomQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'DivinerAtomSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'DivinerAtomizeWorkflow' => 'DivinerWorkflow',
     'DivinerBookController' => 'DivinerController',
     'DivinerBookQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'DivinerController' => 'PhabricatorController',
     'DivinerDAO' => 'PhabricatorLiskDAO',
     'DivinerDefaultRenderer' => 'DivinerRenderer',
     'DivinerFileAtomizer' => 'DivinerAtomizer',
     'DivinerFindController' => 'DivinerController',
     'DivinerGenerateWorkflow' => 'DivinerWorkflow',
     'DivinerLegacyController' => 'DivinerController',
     'DivinerLiveAtom' => 'DivinerDAO',
     'DivinerLiveBook' =>
     array(
       0 => 'DivinerDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'DivinerLivePublisher' => 'DivinerPublisher',
     'DivinerLiveSymbol' =>
     array(
       0 => 'DivinerDAO',
       1 => 'PhabricatorPolicyInterface',
       2 => 'PhabricatorMarkupInterface',
     ),
     'DivinerPHIDTypeAtom' => 'PhabricatorPHIDType',
     'DivinerPHIDTypeBook' => 'PhabricatorPHIDType',
     'DivinerPublishCache' => 'DivinerDiskCache',
     'DivinerRemarkupRuleSymbol' => 'PhutilRemarkupRule',
     'DivinerStaticPublisher' => 'DivinerPublisher',
     'DivinerWorkflow' => 'PhutilArgumentWorkflow',
     'DoorkeeperBridge' => 'Phobject',
     'DoorkeeperBridgeAsana' => 'DoorkeeperBridge',
     'DoorkeeperDAO' => 'PhabricatorLiskDAO',
     'DoorkeeperExternalObject' =>
     array(
       0 => 'DoorkeeperDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'DoorkeeperExternalObjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'DoorkeeperFeedWorkerAsana' => 'FeedPushWorker',
     'DoorkeeperImportEngine' => 'Phobject',
     'DoorkeeperObjectRef' => 'Phobject',
     'DoorkeeperRemarkupRuleAsana' => 'PhutilRemarkupRule',
     'DoorkeeperTagsController' => 'PhabricatorController',
     'DrydockAllocatorWorker' => 'PhabricatorWorker',
     'DrydockApacheWebrootInterface' => 'DrydockWebrootInterface',
     'DrydockCommandInterface' => 'DrydockInterface',
     'DrydockController' => 'PhabricatorController',
     'DrydockDAO' => 'PhabricatorLiskDAO',
     'DrydockLease' => 'DrydockDAO',
     'DrydockLeaseListController' => 'DrydockController',
     'DrydockLeaseQuery' => 'PhabricatorOffsetPagedQuery',
     'DrydockLeaseReleaseController' => 'DrydockController',
     'DrydockLeaseStatus' => 'DrydockConstants',
     'DrydockLeaseViewController' => 'DrydockController',
     'DrydockLocalCommandInterface' => 'DrydockCommandInterface',
     'DrydockLocalHostBlueprint' => 'DrydockBlueprint',
     'DrydockLog' => 'DrydockDAO',
     'DrydockLogController' => 'DrydockController',
     'DrydockLogQuery' => 'PhabricatorOffsetPagedQuery',
     'DrydockManagementCloseWorkflow' => 'DrydockManagementWorkflow',
     'DrydockManagementLeaseWorkflow' => 'DrydockManagementWorkflow',
     'DrydockManagementReleaseWorkflow' => 'DrydockManagementWorkflow',
     'DrydockManagementWaitForLeaseWorkflow' => 'DrydockManagementWorkflow',
     'DrydockManagementWorkflow' => 'PhutilArgumentWorkflow',
     'DrydockResource' => 'DrydockDAO',
     'DrydockResourceCloseController' => 'DrydockController',
     'DrydockResourceListController' => 'DrydockController',
     'DrydockResourceQuery' => 'PhabricatorOffsetPagedQuery',
     'DrydockResourceStatus' => 'DrydockConstants',
     'DrydockResourceViewController' => 'DrydockController',
     'DrydockSSHCommandInterface' => 'DrydockCommandInterface',
     'DrydockWebrootInterface' => 'DrydockInterface',
     'DrydockWorkingCopyBlueprint' => 'DrydockBlueprint',
     'FeedPublisherHTTPWorker' => 'FeedPushWorker',
     'FeedPublisherWorker' => 'FeedPushWorker',
     'FeedPushWorker' => 'PhabricatorWorker',
     'FilesCreateMailReceiver' => 'PhabricatorMailReceiver',
     'HarbormasterDAO' => 'PhabricatorLiskDAO',
     'HarbormasterObject' => 'HarbormasterDAO',
     'HarbormasterRunnerWorker' => 'PhabricatorWorker',
     'HarbormasterScratchTable' => 'HarbormasterDAO',
     'HeraldAction' => 'HeraldDAO',
     'HeraldApplyTranscript' => 'HeraldDAO',
     'HeraldCommitAdapter' => 'HeraldAdapter',
     'HeraldCondition' => 'HeraldDAO',
     'HeraldController' => 'PhabricatorController',
     'HeraldDAO' => 'PhabricatorLiskDAO',
     'HeraldDeleteController' => 'HeraldController',
     'HeraldDifferentialRevisionAdapter' => 'HeraldAdapter',
     'HeraldEditLogQuery' => 'PhabricatorOffsetPagedQuery',
     'HeraldInvalidActionException' => 'Exception',
     'HeraldInvalidConditionException' => 'Exception',
     'HeraldInvalidFieldException' => 'Exception',
     'HeraldNewController' => 'HeraldController',
     'HeraldPHIDTypeRule' => 'PhabricatorPHIDType',
     'HeraldPholioMockAdapter' => 'HeraldAdapter',
     'HeraldRecursiveConditionsException' => 'Exception',
     'HeraldRule' =>
     array(
       0 => 'HeraldDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'HeraldRuleController' => 'HeraldController',
     'HeraldRuleEdit' => 'HeraldDAO',
     'HeraldRuleEditHistoryController' => 'HeraldController',
     'HeraldRuleEditHistoryView' => 'AphrontView',
     'HeraldRuleListController' =>
     array(
       0 => 'HeraldController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'HeraldRuleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'HeraldRuleSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'HeraldRuleTransaction' => 'PhabricatorApplicationTransaction',
     'HeraldRuleTransactionComment' => 'PhabricatorApplicationTransactionComment',
     'HeraldRuleViewController' => 'HeraldController',
     'HeraldTestConsoleController' => 'HeraldController',
     'HeraldTranscript' => 'HeraldDAO',
     'HeraldTranscriptController' => 'HeraldController',
     'HeraldTranscriptListController' => 'HeraldController',
     'JavelinReactorExample' => 'PhabricatorUIExample',
     'JavelinUIExample' => 'PhabricatorUIExample',
     'JavelinViewExample' => 'PhabricatorUIExample',
     'JavelinViewExampleServerView' => 'AphrontView',
     'LegalpadController' => 'PhabricatorController',
     'LegalpadDAO' => 'PhabricatorLiskDAO',
     'LegalpadDocument' =>
     array(
       0 => 'LegalpadDAO',
       1 => 'PhabricatorPolicyInterface',
       2 => 'PhabricatorSubscribableInterface',
       3 => 'PhabricatorApplicationTransactionInterface',
     ),
     'LegalpadDocumentBody' =>
     array(
       0 => 'LegalpadDAO',
       1 => 'PhabricatorMarkupInterface',
     ),
     'LegalpadDocumentCommentController' => 'LegalpadController',
     'LegalpadDocumentEditController' => 'LegalpadController',
     'LegalpadDocumentEditor' => 'PhabricatorApplicationTransactionEditor',
     'LegalpadDocumentListController' =>
     array(
       0 => 'LegalpadController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'LegalpadDocumentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'LegalpadDocumentSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'LegalpadDocumentSignController' => 'LegalpadController',
     'LegalpadDocumentSignature' => 'LegalpadDAO',
     'LegalpadDocumentViewController' => 'LegalpadController',
     'LegalpadMockMailReceiver' => 'PhabricatorObjectMailReceiver',
     'LegalpadReplyHandler' => 'PhabricatorMailReplyHandler',
     'LegalpadTransaction' => 'PhabricatorApplicationTransaction',
     'LegalpadTransactionComment' => 'PhabricatorApplicationTransactionComment',
     'LegalpadTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
     'LegalpadTransactionType' => 'LegalpadConstants',
     'LegalpadTransactionView' => 'PhabricatorApplicationTransactionView',
     'LiskChunkTestCase' => 'PhabricatorTestCase',
     'LiskDAOTestCase' => 'PhabricatorTestCase',
     'LiskEphemeralObjectException' => 'Exception',
     'LiskFixtureTestCase' => 'PhabricatorTestCase',
     'LiskIsolationTestCase' => 'PhabricatorTestCase',
     'LiskIsolationTestDAO' => 'LiskDAO',
     'LiskIsolationTestDAOException' => 'Exception',
     'LiskMigrationIterator' => 'PhutilBufferedIterator',
     'LiskRawMigrationIterator' => 'PhutilBufferedIterator',
     'ManiphestAction' => 'ManiphestConstants',
     'ManiphestAuxiliaryFieldDefaultSpecification' => 'ManiphestAuxiliaryFieldSpecification',
     'ManiphestAuxiliaryFieldSpecification' => 'PhabricatorMarkupInterface',
     'ManiphestAuxiliaryFieldTypeException' => 'Exception',
     'ManiphestAuxiliaryFieldValidationException' => 'Exception',
     'ManiphestBatchEditController' => 'ManiphestController',
     'ManiphestController' => 'PhabricatorController',
     'ManiphestCreateMailReceiver' => 'PhabricatorMailReceiver',
     'ManiphestDAO' => 'PhabricatorLiskDAO',
     'ManiphestDefaultTaskExtensions' => 'ManiphestTaskExtensions',
     'ManiphestEdgeEventListener' => 'PhutilEventListener',
     'ManiphestExcelDefaultFormat' => 'ManiphestExcelFormat',
     'ManiphestExportController' => 'ManiphestController',
     'ManiphestHovercardEventListener' => 'PhutilEventListener',
     'ManiphestPHIDTypeTask' => 'PhabricatorPHIDType',
     'ManiphestPeopleMenuEventListener' => 'PhutilEventListener',
     'ManiphestRemarkupRule' => 'PhabricatorRemarkupRuleObject',
     'ManiphestReplyHandler' => 'PhabricatorMailReplyHandler',
     'ManiphestReportController' => 'ManiphestController',
     'ManiphestSavedQuery' => 'ManiphestDAO',
     'ManiphestSavedQueryDeleteController' => 'ManiphestController',
     'ManiphestSavedQueryEditController' => 'ManiphestController',
     'ManiphestSavedQueryListController' => 'ManiphestController',
     'ManiphestSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
     'ManiphestSubpriorityController' => 'ManiphestController',
     'ManiphestSubscribeController' => 'ManiphestController',
     'ManiphestTask' =>
     array(
       0 => 'ManiphestDAO',
       1 => 'PhabricatorMarkupInterface',
       2 => 'PhabricatorPolicyInterface',
       3 => 'PhabricatorTokenReceiverInterface',
       4 => 'PhrequentTrackableInterface',
     ),
     'ManiphestTaskAuxiliaryStorage' => 'ManiphestDAO',
     'ManiphestTaskDescriptionChangeController' => 'ManiphestController',
     'ManiphestTaskDescriptionPreviewController' => 'ManiphestController',
     'ManiphestTaskDetailController' => 'ManiphestController',
     'ManiphestTaskEditController' => 'ManiphestController',
     'ManiphestTaskListController' => 'ManiphestController',
     'ManiphestTaskListView' => 'ManiphestView',
     'ManiphestTaskMailReceiver' => 'PhabricatorObjectMailReceiver',
     'ManiphestTaskOwner' => 'ManiphestConstants',
     'ManiphestTaskPriority' => 'ManiphestConstants',
     'ManiphestTaskProject' => 'ManiphestDAO',
     'ManiphestTaskProjectsView' => 'ManiphestView',
     'ManiphestTaskQuery' => 'PhabricatorQuery',
     'ManiphestTaskStatus' => 'ManiphestConstants',
     'ManiphestTaskSubscriber' => 'ManiphestDAO',
     'ManiphestTransaction' =>
     array(
       0 => 'ManiphestDAO',
       1 => 'PhabricatorMarkupInterface',
     ),
     'ManiphestTransactionDetailView' => 'ManiphestView',
     'ManiphestTransactionEditor' => 'PhabricatorEditor',
     'ManiphestTransactionListView' => 'ManiphestView',
     'ManiphestTransactionPreviewController' => 'ManiphestController',
     'ManiphestTransactionSaveController' => 'ManiphestController',
     'ManiphestTransactionType' => 'ManiphestConstants',
     'ManiphestView' => 'AphrontView',
     'MetaMTANotificationType' => 'MetaMTAConstants',
     'MetaMTAReceivedMailStatus' => 'MetaMTAConstants',
     'OwnersPackageReplyHandler' => 'PhabricatorMailReplyHandler',
     'PHUIBoxExample' => 'PhabricatorUIExample',
     'PHUIBoxView' => 'AphrontTagView',
     'PHUIButtonExample' => 'PhabricatorUIExample',
     'PHUIButtonView' => 'AphrontTagView',
     'PHUIColorPalletteExample' => 'PhabricatorUIExample',
     'PHUIDocumentExample' => 'PhabricatorUIExample',
     'PHUIDocumentView' => 'AphrontTagView',
     'PHUIFeedStoryExample' => 'PhabricatorUIExample',
     'PHUIFeedStoryView' => 'AphrontView',
+    'PHUIFormBoxView' => 'AphrontView',
     'PHUIFormDividerControl' => 'AphrontFormControl',
     'PHUIFormFreeformDateControl' => 'AphrontFormControl',
+    'PHUIFormLayoutView' => 'AphrontView',
     'PHUIFormMultiSubmitControl' => 'AphrontFormControl',
     'PHUIFormPageView' => 'AphrontView',
     'PHUIIconExample' => 'PhabricatorUIExample',
     'PHUIIconView' => 'AphrontTagView',
     'PHUIListExample' => 'PhabricatorUIExample',
     'PHUIListItemView' => 'AphrontTagView',
     'PHUIListView' => 'AphrontTagView',
     'PHUIListViewTestCase' => 'PhabricatorTestCase',
     'PHUIPagedFormView' => 'AphrontTagView',
     'PHUIPinboardItemView' => 'AphrontView',
     'PHUIPinboardView' => 'AphrontView',
     'PHUIRemarkupPreviewPanel' => 'AphrontTagView',
     'PHUIStatusItemView' => 'AphrontTagView',
     'PHUIStatusListView' => 'AphrontTagView',
     'PHUITextExample' => 'PhabricatorUIExample',
     'PHUITextView' => 'AphrontTagView',
     'PackageCreateMail' => 'PackageMail',
     'PackageDeleteMail' => 'PackageMail',
     'PackageMail' => 'PhabricatorMail',
     'PackageModifyMail' => 'PackageMail',
     'PasteCreateMailReceiver' => 'PhabricatorMailReceiver',
     'PasteEmbedView' => 'AphrontView',
     'PasteMockMailReceiver' => 'PhabricatorObjectMailReceiver',
     'PasteReplyHandler' => 'PhabricatorMailReplyHandler',
     'Phabricator404Controller' => 'PhabricatorController',
     'PhabricatorAWSConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorAccessLogConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorActionHeaderExample' => 'PhabricatorUIExample',
     'PhabricatorActionHeaderView' => 'AphrontView',
     'PhabricatorActionListExample' => 'PhabricatorUIExample',
     'PhabricatorActionListView' => 'AphrontView',
     'PhabricatorActionView' => 'AphrontView',
     'PhabricatorAllCapsTranslation' => 'PhabricatorTranslation',
     'PhabricatorAnchorView' => 'AphrontView',
     'PhabricatorAphrontBarExample' => 'PhabricatorUIExample',
     'PhabricatorAphrontViewTestCase' => 'PhabricatorTestCase',
     'PhabricatorApplicationApplications' => 'PhabricatorApplication',
     'PhabricatorApplicationAudit' => 'PhabricatorApplication',
     'PhabricatorApplicationAuth' => 'PhabricatorApplication',
     'PhabricatorApplicationCalendar' => 'PhabricatorApplication',
     'PhabricatorApplicationChatLog' => 'PhabricatorApplication',
     'PhabricatorApplicationConduit' => 'PhabricatorApplication',
     'PhabricatorApplicationConfig' => 'PhabricatorApplication',
     'PhabricatorApplicationConfigOptions' => 'Phobject',
     'PhabricatorApplicationConpherence' => 'PhabricatorApplication',
     'PhabricatorApplicationCountdown' => 'PhabricatorApplication',
     'PhabricatorApplicationDaemons' => 'PhabricatorApplication',
     'PhabricatorApplicationDetailViewController' => 'PhabricatorApplicationsController',
     'PhabricatorApplicationDifferential' => 'PhabricatorApplication',
     'PhabricatorApplicationDiffusion' => 'PhabricatorApplication',
     'PhabricatorApplicationDiviner' => 'PhabricatorApplication',
     'PhabricatorApplicationDoorkeeper' => 'PhabricatorApplication',
     'PhabricatorApplicationDrydock' => 'PhabricatorApplication',
     'PhabricatorApplicationFact' => 'PhabricatorApplication',
     'PhabricatorApplicationFeed' => 'PhabricatorApplication',
     'PhabricatorApplicationFiles' => 'PhabricatorApplication',
     'PhabricatorApplicationFlags' => 'PhabricatorApplication',
     'PhabricatorApplicationHerald' => 'PhabricatorApplication',
     'PhabricatorApplicationLaunchView' => 'AphrontView',
     'PhabricatorApplicationLegalpad' => 'PhabricatorApplication',
     'PhabricatorApplicationMacro' => 'PhabricatorApplication',
     'PhabricatorApplicationMailingLists' => 'PhabricatorApplication',
     'PhabricatorApplicationManiphest' => 'PhabricatorApplication',
     'PhabricatorApplicationMetaMTA' => 'PhabricatorApplication',
     'PhabricatorApplicationOwners' => 'PhabricatorApplication',
     'PhabricatorApplicationPHPAST' => 'PhabricatorApplication',
     'PhabricatorApplicationPaste' => 'PhabricatorApplication',
     'PhabricatorApplicationPeople' => 'PhabricatorApplication',
     'PhabricatorApplicationPhame' => 'PhabricatorApplication',
     'PhabricatorApplicationPhlux' => 'PhabricatorApplication',
     'PhabricatorApplicationPholio' => 'PhabricatorApplication',
     'PhabricatorApplicationPhortune' => 'PhabricatorApplication',
     'PhabricatorApplicationPhrequent' => 'PhabricatorApplication',
     'PhabricatorApplicationPhriction' => 'PhabricatorApplication',
     'PhabricatorApplicationPonder' => 'PhabricatorApplication',
     'PhabricatorApplicationProject' => 'PhabricatorApplication',
     'PhabricatorApplicationReleeph' => 'PhabricatorApplication',
     'PhabricatorApplicationReleephConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorApplicationRepositories' => 'PhabricatorApplication',
     'PhabricatorApplicationSearch' => 'PhabricatorApplication',
     'PhabricatorApplicationSearchController' => 'PhabricatorSearchBaseController',
     'PhabricatorApplicationSettings' => 'PhabricatorApplication',
     'PhabricatorApplicationSlowvote' => 'PhabricatorApplication',
     'PhabricatorApplicationStatusView' => 'AphrontView',
     'PhabricatorApplicationSubscriptions' => 'PhabricatorApplication',
     'PhabricatorApplicationTokens' => 'PhabricatorApplication',
     'PhabricatorApplicationTransaction' =>
     array(
       0 => 'PhabricatorLiskDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorApplicationTransactionComment' =>
     array(
       0 => 'PhabricatorLiskDAO',
       1 => 'PhabricatorMarkupInterface',
       2 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorApplicationTransactionCommentEditController' => 'PhabricatorApplicationTransactionController',
     'PhabricatorApplicationTransactionCommentEditor' => 'PhabricatorEditor',
     'PhabricatorApplicationTransactionCommentHistoryController' => 'PhabricatorApplicationTransactionController',
     'PhabricatorApplicationTransactionCommentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorApplicationTransactionCommentView' => 'AphrontView',
     'PhabricatorApplicationTransactionController' => 'PhabricatorController',
     'PhabricatorApplicationTransactionDetailController' => 'PhabricatorApplicationTransactionController',
     'PhabricatorApplicationTransactionEditor' => 'PhabricatorEditor',
     'PhabricatorApplicationTransactionFeedStory' => 'PhabricatorFeedStory',
     'PhabricatorApplicationTransactionNoEffectException' => 'Exception',
     'PhabricatorApplicationTransactionNoEffectResponse' => 'AphrontProxyResponse',
     'PhabricatorApplicationTransactionPHIDTypeTransaction' => 'PhabricatorPHIDType',
     'PhabricatorApplicationTransactionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorApplicationTransactionResponse' => 'AphrontProxyResponse',
     'PhabricatorApplicationTransactionTextDiffDetailView' => 'AphrontView',
     'PhabricatorApplicationTransactionView' => 'AphrontView',
     'PhabricatorApplicationTransactions' => 'PhabricatorApplication',
     'PhabricatorApplicationUIExamples' => 'PhabricatorApplication',
     'PhabricatorApplicationUninstallController' => 'PhabricatorApplicationsController',
     'PhabricatorApplicationXHProf' => 'PhabricatorApplication',
     'PhabricatorApplicationsController' => 'PhabricatorController',
     'PhabricatorApplicationsListController' => 'PhabricatorApplicationsController',
     'PhabricatorAsanaConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorAuditAddCommentController' => 'PhabricatorAuditController',
     'PhabricatorAuditComment' =>
     array(
       0 => 'PhabricatorAuditDAO',
       1 => 'PhabricatorMarkupInterface',
     ),
     'PhabricatorAuditCommentEditor' => 'PhabricatorEditor',
     'PhabricatorAuditCommitListView' => 'AphrontView',
     'PhabricatorAuditController' => 'PhabricatorController',
     'PhabricatorAuditDAO' => 'PhabricatorLiskDAO',
     'PhabricatorAuditInlineComment' =>
     array(
       0 => 'PhabricatorAuditDAO',
       1 => 'PhabricatorInlineCommentInterface',
     ),
     'PhabricatorAuditListController' => 'PhabricatorAuditController',
     'PhabricatorAuditListView' => 'AphrontView',
     'PhabricatorAuditMailReceiver' => 'PhabricatorObjectMailReceiver',
     'PhabricatorAuditManagementDeleteWorkflow' => 'PhabricatorAuditManagementWorkflow',
     'PhabricatorAuditManagementWorkflow' => 'PhutilArgumentWorkflow',
     'PhabricatorAuditPreviewController' => 'PhabricatorAuditController',
     'PhabricatorAuditReplyHandler' => 'PhabricatorMailReplyHandler',
     'PhabricatorAuthAccountView' => 'AphrontView',
     'PhabricatorAuthConfirmLinkController' => 'PhabricatorAuthController',
     'PhabricatorAuthController' => 'PhabricatorController',
     'PhabricatorAuthDAO' => 'PhabricatorLiskDAO',
     'PhabricatorAuthDisableController' => 'PhabricatorAuthProviderConfigController',
     'PhabricatorAuthEditController' => 'PhabricatorAuthProviderConfigController',
     'PhabricatorAuthLinkController' => 'PhabricatorAuthController',
     'PhabricatorAuthListController' => 'PhabricatorAuthProviderConfigController',
     'PhabricatorAuthLoginController' => 'PhabricatorAuthController',
     'PhabricatorAuthManagementLDAPWorkflow' => 'PhabricatorAuthManagementWorkflow',
     'PhabricatorAuthManagementRecoverWorkflow' => 'PhabricatorAuthManagementWorkflow',
     'PhabricatorAuthManagementRefreshWorkflow' => 'PhabricatorAuthManagementWorkflow',
     'PhabricatorAuthManagementWorkflow' => 'PhutilArgumentWorkflow',
     'PhabricatorAuthNewController' => 'PhabricatorAuthProviderConfigController',
     'PhabricatorAuthOldOAuthRedirectController' => 'PhabricatorAuthController',
     'PhabricatorAuthProviderConfig' =>
     array(
       0 => 'PhabricatorAuthDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorAuthProviderConfigController' => 'PhabricatorAuthController',
     'PhabricatorAuthProviderConfigEditor' => 'PhabricatorApplicationTransactionEditor',
     'PhabricatorAuthProviderConfigQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorAuthProviderConfigTransaction' => 'PhabricatorApplicationTransaction',
     'PhabricatorAuthProviderConfigTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
     'PhabricatorAuthProviderLDAP' => 'PhabricatorAuthProvider',
     'PhabricatorAuthProviderOAuth' => 'PhabricatorAuthProvider',
     'PhabricatorAuthProviderOAuthAmazon' => 'PhabricatorAuthProviderOAuth',
     'PhabricatorAuthProviderOAuthAsana' => 'PhabricatorAuthProviderOAuth',
     'PhabricatorAuthProviderOAuthDisqus' => 'PhabricatorAuthProviderOAuth',
     'PhabricatorAuthProviderOAuthFacebook' => 'PhabricatorAuthProviderOAuth',
     'PhabricatorAuthProviderOAuthGitHub' => 'PhabricatorAuthProviderOAuth',
     'PhabricatorAuthProviderOAuthGoogle' => 'PhabricatorAuthProviderOAuth',
     'PhabricatorAuthProviderOAuthTwitch' => 'PhabricatorAuthProviderOAuth',
     'PhabricatorAuthProviderPassword' => 'PhabricatorAuthProvider',
     'PhabricatorAuthRegisterController' => 'PhabricatorAuthController',
     'PhabricatorAuthStartController' => 'PhabricatorAuthController',
     'PhabricatorAuthUnlinkController' => 'PhabricatorAuthController',
     'PhabricatorAuthValidateController' => 'PhabricatorAuthController',
     'PhabricatorAuthenticationConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorBarePageExample' => 'PhabricatorUIExample',
     'PhabricatorBarePageView' => 'AphrontPageView',
     'PhabricatorBaseEnglishTranslation' => 'PhabricatorTranslation',
     'PhabricatorBot' => 'PhabricatorDaemon',
     'PhabricatorBotBaseStreamingProtocolAdapter' => 'PhabricatorBaseProtocolAdapter',
     'PhabricatorBotChannel' => 'PhabricatorBotTarget',
     'PhabricatorBotDebugLogHandler' => 'PhabricatorBotHandler',
     'PhabricatorBotDifferentialNotificationHandler' => 'PhabricatorBotHandler',
     'PhabricatorBotFeedNotificationHandler' => 'PhabricatorBotHandler',
     'PhabricatorBotFlowdockProtocolAdapter' => 'PhabricatorBotBaseStreamingProtocolAdapter',
     'PhabricatorBotLogHandler' => 'PhabricatorBotHandler',
     'PhabricatorBotMacroHandler' => 'PhabricatorBotHandler',
     'PhabricatorBotObjectNameHandler' => 'PhabricatorBotHandler',
     'PhabricatorBotSymbolHandler' => 'PhabricatorBotHandler',
     'PhabricatorBotUser' => 'PhabricatorBotTarget',
     'PhabricatorBotWhatsNewHandler' => 'PhabricatorBotHandler',
     'PhabricatorBuiltinPatchList' => 'PhabricatorSQLPatchList',
     'PhabricatorBusyExample' => 'PhabricatorUIExample',
     'PhabricatorCacheDAO' => 'PhabricatorLiskDAO',
     'PhabricatorCacheManagementPurgeWorkflow' => 'PhabricatorSearchManagementWorkflow',
     'PhabricatorCacheManagementWorkflow' => 'PhutilArgumentWorkflow',
     'PhabricatorCalendarBrowseController' => 'PhabricatorCalendarController',
     'PhabricatorCalendarController' => 'PhabricatorController',
     'PhabricatorCalendarDAO' => 'PhabricatorLiskDAO',
     'PhabricatorCalendarDeleteStatusController' => 'PhabricatorCalendarController',
     'PhabricatorCalendarEditStatusController' => 'PhabricatorCalendarController',
     'PhabricatorCalendarHoliday' => 'PhabricatorCalendarDAO',
     'PhabricatorCalendarHolidayTestCase' => 'PhabricatorTestCase',
     'PhabricatorCalendarViewStatusController' => 'PhabricatorCalendarController',
     'PhabricatorCampfireProtocolAdapter' => 'PhabricatorBotBaseStreamingProtocolAdapter',
     'PhabricatorChangesetResponse' => 'AphrontProxyResponse',
     'PhabricatorChatLogChannel' =>
     array(
       0 => 'PhabricatorChatLogDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorChatLogChannelListController' => 'PhabricatorChatLogController',
     'PhabricatorChatLogChannelLogController' => 'PhabricatorChatLogController',
     'PhabricatorChatLogChannelQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorChatLogController' => 'PhabricatorController',
     'PhabricatorChatLogDAO' => 'PhabricatorLiskDAO',
     'PhabricatorChatLogEvent' =>
     array(
       0 => 'PhabricatorChatLogDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorChatLogEventType' => 'PhabricatorChatLogConstants',
     'PhabricatorChatLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorConduitAPIController' => 'PhabricatorConduitController',
     'PhabricatorConduitCertificateToken' => 'PhabricatorConduitDAO',
     'PhabricatorConduitConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorConduitConnectionLog' => 'PhabricatorConduitDAO',
     'PhabricatorConduitConsoleController' => 'PhabricatorConduitController',
     'PhabricatorConduitController' => 'PhabricatorController',
     'PhabricatorConduitDAO' => 'PhabricatorLiskDAO',
     'PhabricatorConduitListController' =>
     array(
       0 => 'PhabricatorConduitController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'PhabricatorConduitLogController' => 'PhabricatorConduitController',
     'PhabricatorConduitLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorConduitMethodCallLog' =>
     array(
       0 => 'PhabricatorConduitDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorConduitMethodQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorConduitSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'PhabricatorConduitTokenController' => 'PhabricatorConduitController',
     'PhabricatorConfigAllController' => 'PhabricatorConfigController',
     'PhabricatorConfigController' => 'PhabricatorController',
     'PhabricatorConfigDatabaseSource' => 'PhabricatorConfigProxySource',
     'PhabricatorConfigDefaultSource' => 'PhabricatorConfigProxySource',
     'PhabricatorConfigDictionarySource' => 'PhabricatorConfigSource',
     'PhabricatorConfigEditController' => 'PhabricatorConfigController',
     'PhabricatorConfigEditor' => 'PhabricatorApplicationTransactionEditor',
     'PhabricatorConfigEntry' =>
     array(
       0 => 'PhabricatorConfigEntryDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorConfigEntryDAO' => 'PhabricatorLiskDAO',
     'PhabricatorConfigEntryQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorConfigFileSource' => 'PhabricatorConfigProxySource',
     'PhabricatorConfigGroupController' => 'PhabricatorConfigController',
     'PhabricatorConfigIgnoreController' => 'PhabricatorApplicationsController',
     'PhabricatorConfigIssueListController' => 'PhabricatorConfigController',
     'PhabricatorConfigIssueViewController' => 'PhabricatorConfigController',
     'PhabricatorConfigListController' => 'PhabricatorConfigController',
     'PhabricatorConfigLocalSource' => 'PhabricatorConfigProxySource',
     'PhabricatorConfigManagementDeleteWorkflow' => 'PhabricatorConfigManagementWorkflow',
     'PhabricatorConfigManagementGetWorkflow' => 'PhabricatorConfigManagementWorkflow',
     'PhabricatorConfigManagementListWorkflow' => 'PhabricatorConfigManagementWorkflow',
     'PhabricatorConfigManagementSetWorkflow' => 'PhabricatorConfigManagementWorkflow',
     'PhabricatorConfigManagementWorkflow' => 'PhutilArgumentWorkflow',
     'PhabricatorConfigOption' =>
     array(
       0 => 'Phobject',
       1 => 'PhabricatorMarkupInterface',
     ),
     'PhabricatorConfigPHIDTypeConfig' => 'PhabricatorPHIDType',
     'PhabricatorConfigProxySource' => 'PhabricatorConfigSource',
     'PhabricatorConfigResponse' => 'AphrontHTMLResponse',
     'PhabricatorConfigStackSource' => 'PhabricatorConfigSource',
     'PhabricatorConfigTransaction' => 'PhabricatorApplicationTransaction',
     'PhabricatorConfigTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
     'PhabricatorConfigValidationException' => 'Exception',
     'PhabricatorConpherencePHIDTypeThread' => 'PhabricatorPHIDType',
     'PhabricatorContentSourceView' => 'AphrontView',
     'PhabricatorController' => 'AphrontController',
     'PhabricatorCoreConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorCountdown' =>
     array(
       0 => 'PhabricatorCountdownDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorCountdownController' => 'PhabricatorController',
     'PhabricatorCountdownDAO' => 'PhabricatorLiskDAO',
     'PhabricatorCountdownDeleteController' => 'PhabricatorCountdownController',
     'PhabricatorCountdownEditController' => 'PhabricatorCountdownController',
     'PhabricatorCountdownListController' =>
     array(
       0 => 'PhabricatorCountdownController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'PhabricatorCountdownPHIDTypeCountdown' => 'PhabricatorPHIDType',
     'PhabricatorCountdownQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorCountdownRemarkupRule' => 'PhabricatorRemarkupRuleObject',
     'PhabricatorCountdownSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'PhabricatorCountdownView' => 'AphrontTagView',
     'PhabricatorCountdownViewController' => 'PhabricatorCountdownController',
     'PhabricatorCrumbView' => 'AphrontView',
     'PhabricatorCrumbsView' => 'AphrontView',
     'PhabricatorCursorPagedPolicyAwareQuery' => 'PhabricatorPolicyAwareQuery',
     'PhabricatorCustomFieldConfigOptionType' => 'PhabricatorConfigOptionType',
     'PhabricatorCustomFieldDataNotAvailableException' => 'Exception',
     'PhabricatorCustomFieldImplementationIncompleteException' => 'Exception',
     'PhabricatorCustomFieldIndexStorage' => 'PhabricatorLiskDAO',
     'PhabricatorCustomFieldList' => 'Phobject',
     'PhabricatorCustomFieldNotAttachedException' => 'Exception',
     'PhabricatorCustomFieldNotProxyException' => 'Exception',
     'PhabricatorCustomFieldNumericIndexStorage' => 'PhabricatorCustomFieldIndexStorage',
     'PhabricatorCustomFieldStorage' => 'PhabricatorLiskDAO',
     'PhabricatorCustomFieldStringIndexStorage' => 'PhabricatorCustomFieldIndexStorage',
     'PhabricatorCustomFieldValidationException' => 'Exception',
     'PhabricatorDaemon' => 'PhutilDaemon',
     'PhabricatorDaemonCombinedLogController' => 'PhabricatorDaemonController',
     'PhabricatorDaemonConsoleController' => 'PhabricatorDaemonController',
     'PhabricatorDaemonController' => 'PhabricatorController',
     'PhabricatorDaemonDAO' => 'PhabricatorLiskDAO',
     'PhabricatorDaemonEventListener' => 'PhutilEventListener',
     'PhabricatorDaemonLog' =>
     array(
       0 => 'PhabricatorDaemonDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorDaemonLogEvent' => 'PhabricatorDaemonDAO',
     'PhabricatorDaemonLogEventViewController' => 'PhabricatorDaemonController',
     'PhabricatorDaemonLogEventsView' => 'AphrontView',
     'PhabricatorDaemonLogListController' => 'PhabricatorDaemonController',
     'PhabricatorDaemonLogListView' => 'AphrontView',
     'PhabricatorDaemonLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorDaemonLogViewController' => 'PhabricatorDaemonController',
     'PhabricatorDaemonManagementDebugWorkflow' => 'PhabricatorDaemonManagementWorkflow',
     'PhabricatorDaemonManagementLaunchWorkflow' => 'PhabricatorDaemonManagementWorkflow',
     'PhabricatorDaemonManagementListWorkflow' => 'PhabricatorDaemonManagementWorkflow',
     'PhabricatorDaemonManagementLogWorkflow' => 'PhabricatorDaemonManagementWorkflow',
     'PhabricatorDaemonManagementRestartWorkflow' => 'PhabricatorDaemonManagementWorkflow',
     'PhabricatorDaemonManagementStartWorkflow' => 'PhabricatorDaemonManagementWorkflow',
     'PhabricatorDaemonManagementStatusWorkflow' => 'PhabricatorDaemonManagementWorkflow',
     'PhabricatorDaemonManagementStopWorkflow' => 'PhabricatorDaemonManagementWorkflow',
     'PhabricatorDaemonManagementWorkflow' => 'PhutilArgumentWorkflow',
     'PhabricatorDataNotAttachedException' => 'Exception',
     'PhabricatorDebugController' => 'PhabricatorController',
     'PhabricatorDefaultFileStorageEngineSelector' => 'PhabricatorFileStorageEngineSelector',
     'PhabricatorDefaultSearchEngineSelector' => 'PhabricatorSearchEngineSelector',
     'PhabricatorDeveloperConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorDifferentialConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorDifferentialRevisionTestDataGenerator' => 'PhabricatorTestDataGenerator',
     'PhabricatorDiffusionConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorDirectoryController' => 'PhabricatorController',
     'PhabricatorDirectoryMainController' => 'PhabricatorDirectoryController',
     'PhabricatorDisabledUserController' => 'PhabricatorAuthController',
     'PhabricatorDisqusConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorDraft' => 'PhabricatorDraftDAO',
     'PhabricatorDraftDAO' => 'PhabricatorLiskDAO',
     'PhabricatorEdgeConfig' => 'PhabricatorEdgeConstants',
     'PhabricatorEdgeCycleException' => 'Exception',
     'PhabricatorEdgeEditor' => 'PhabricatorEditor',
     'PhabricatorEdgeGraph' => 'AbstractDirectedGraph',
     'PhabricatorEdgeQuery' => 'PhabricatorQuery',
     'PhabricatorEdgeTestCase' => 'PhabricatorTestCase',
     'PhabricatorEditor' => 'Phobject',
     'PhabricatorEmailLoginController' => 'PhabricatorAuthController',
     'PhabricatorEmailTokenController' => 'PhabricatorAuthController',
     'PhabricatorEmailVerificationController' => 'PhabricatorAuthController',
     'PhabricatorEmptyQueryException' => 'Exception',
     'PhabricatorEnglishTranslation' => 'PhabricatorBaseEnglishTranslation',
     'PhabricatorEnvTestCase' => 'PhabricatorTestCase',
     'PhabricatorErrorExample' => 'PhabricatorUIExample',
     'PhabricatorEvent' => 'PhutilEvent',
     'PhabricatorEventType' => 'PhutilEventType',
     'PhabricatorExampleEventListener' => 'PhutilEventListener',
     'PhabricatorExtendingPhabricatorConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorExternalAccount' =>
     array(
       0 => 'PhabricatorUserDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorExternalAccountQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorFactAggregate' => 'PhabricatorFactDAO',
     'PhabricatorFactChartController' => 'PhabricatorFactController',
     'PhabricatorFactController' => 'PhabricatorController',
     'PhabricatorFactCountEngine' => 'PhabricatorFactEngine',
     'PhabricatorFactCursor' => 'PhabricatorFactDAO',
     'PhabricatorFactDAO' => 'PhabricatorLiskDAO',
     'PhabricatorFactDaemon' => 'PhabricatorDaemon',
     'PhabricatorFactHomeController' => 'PhabricatorFactController',
     'PhabricatorFactLastUpdatedEngine' => 'PhabricatorFactEngine',
     'PhabricatorFactManagementAnalyzeWorkflow' => 'PhabricatorFactManagementWorkflow',
     'PhabricatorFactManagementCursorsWorkflow' => 'PhabricatorFactManagementWorkflow',
     'PhabricatorFactManagementDestroyWorkflow' => 'PhabricatorFactManagementWorkflow',
     'PhabricatorFactManagementListWorkflow' => 'PhabricatorFactManagementWorkflow',
     'PhabricatorFactManagementStatusWorkflow' => 'PhabricatorFactManagementWorkflow',
     'PhabricatorFactManagementWorkflow' => 'PhutilArgumentWorkflow',
     'PhabricatorFactRaw' => 'PhabricatorFactDAO',
     'PhabricatorFactSimpleSpec' => 'PhabricatorFactSpec',
     'PhabricatorFactUpdateIterator' => 'PhutilBufferedIterator',
     'PhabricatorFeedConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorFeedController' => 'PhabricatorController',
     'PhabricatorFeedDAO' => 'PhabricatorLiskDAO',
     'PhabricatorFeedDetailController' => 'PhabricatorFeedController',
     'PhabricatorFeedListController' =>
     array(
       0 => 'PhabricatorFeedController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'PhabricatorFeedManagementRepublishWorkflow' => 'PhabricatorFeedManagementWorkflow',
     'PhabricatorFeedManagementWorkflow' => 'PhutilArgumentWorkflow',
     'PhabricatorFeedPublicStreamController' => 'PhabricatorFeedController',
     'PhabricatorFeedQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorFeedSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'PhabricatorFeedStory' => 'PhabricatorPolicyInterface',
     'PhabricatorFeedStoryAggregate' => 'PhabricatorFeedStory',
     'PhabricatorFeedStoryAudit' => 'PhabricatorFeedStory',
     'PhabricatorFeedStoryCommit' => 'PhabricatorFeedStory',
     'PhabricatorFeedStoryData' => 'PhabricatorFeedDAO',
     'PhabricatorFeedStoryDifferential' => 'PhabricatorFeedStory',
     'PhabricatorFeedStoryDifferentialAggregate' => 'PhabricatorFeedStoryAggregate',
     'PhabricatorFeedStoryManiphest' => 'PhabricatorFeedStory',
     'PhabricatorFeedStoryManiphestAggregate' => 'PhabricatorFeedStoryAggregate',
     'PhabricatorFeedStoryNotification' => 'PhabricatorFeedDAO',
     'PhabricatorFeedStoryPhriction' => 'PhabricatorFeedStory',
     'PhabricatorFeedStoryProject' => 'PhabricatorFeedStory',
     'PhabricatorFeedStoryReference' => 'PhabricatorFeedDAO',
     'PhabricatorFeedStoryStatus' => 'PhabricatorFeedStory',
     'PhabricatorFeedStoryTypeConstants' => 'PhabricatorFeedConstants',
     'PhabricatorFile' =>
     array(
       0 => 'PhabricatorFileDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorFileController' => 'PhabricatorController',
     'PhabricatorFileDAO' => 'PhabricatorLiskDAO',
     'PhabricatorFileDataController' => 'PhabricatorFileController',
     'PhabricatorFileDeleteController' => 'PhabricatorFileController',
     'PhabricatorFileDropUploadController' => 'PhabricatorFileController',
     'PhabricatorFileImageMacro' =>
     array(
       0 => 'PhabricatorFileDAO',
       1 => 'PhabricatorSubscribableInterface',
       2 => 'PhabricatorApplicationTransactionInterface',
       3 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorFileInfoController' => 'PhabricatorFileController',
     'PhabricatorFileLinkListView' => 'AphrontView',
     'PhabricatorFileLinkView' => 'AphrontView',
     'PhabricatorFileListController' =>
     array(
       0 => 'PhabricatorFileController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'PhabricatorFilePHIDTypeFile' => 'PhabricatorPHIDType',
     'PhabricatorFileQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorFileSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'PhabricatorFileShortcutController' => 'PhabricatorFileController',
     'PhabricatorFileStorageBlob' => 'PhabricatorFileDAO',
     'PhabricatorFileStorageConfigurationException' => 'Exception',
     'PhabricatorFileTestCase' => 'PhabricatorTestCase',
     'PhabricatorFileTestDataGenerator' => 'PhabricatorTestDataGenerator',
     'PhabricatorFileTransformController' => 'PhabricatorFileController',
     'PhabricatorFileUploadController' => 'PhabricatorFileController',
     'PhabricatorFileUploadDialogController' => 'PhabricatorFileController',
     'PhabricatorFileUploadException' => 'Exception',
     'PhabricatorFilesConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorFilesManagementEnginesWorkflow' => 'PhabricatorFilesManagementWorkflow',
     'PhabricatorFilesManagementMigrateWorkflow' => 'PhabricatorFilesManagementWorkflow',
     'PhabricatorFilesManagementPurgeWorkflow' => 'PhabricatorFilesManagementWorkflow',
     'PhabricatorFilesManagementRebuildWorkflow' => 'PhabricatorFilesManagementWorkflow',
     'PhabricatorFilesManagementWorkflow' => 'PhutilArgumentWorkflow',
     'PhabricatorFlag' =>
     array(
       0 => 'PhabricatorFlagDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorFlagColor' => 'PhabricatorFlagConstants',
     'PhabricatorFlagController' => 'PhabricatorController',
     'PhabricatorFlagDAO' => 'PhabricatorLiskDAO',
     'PhabricatorFlagDeleteController' => 'PhabricatorFlagController',
     'PhabricatorFlagEditController' => 'PhabricatorFlagController',
     'PhabricatorFlagListController' =>
     array(
       0 => 'PhabricatorFlagController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'PhabricatorFlagQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorFlagSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'PhabricatorFlagSelectControl' => 'AphrontFormControl',
     'PhabricatorFlagsUIEventListener' => 'PhutilEventListener',
     'PhabricatorFormExample' => 'PhabricatorUIExample',
     'PhabricatorGarbageCollectorConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorGarbageCollectorDaemon' => 'PhabricatorDaemon',
     'PhabricatorGestureExample' => 'PhabricatorUIExample',
     'PhabricatorGlobalLock' => 'PhutilLock',
     'PhabricatorGlobalUploadTargetView' => 'AphrontView',
     'PhabricatorHandleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorHashTestCase' => 'PhabricatorTestCase',
     'PhabricatorHeaderView' => 'AphrontView',
     'PhabricatorHelpController' => 'PhabricatorController',
     'PhabricatorHelpKeyboardShortcutController' => 'PhabricatorHelpController',
     'PhabricatorHovercardExample' => 'PhabricatorUIExample',
     'PhabricatorHovercardView' => 'AphrontView',
     'PhabricatorIRCBot' => 'PhabricatorDaemon',
     'PhabricatorIRCProtocolAdapter' => 'PhabricatorBaseProtocolAdapter',
     'PhabricatorIRCProtocolHandler' => 'PhabricatorBotHandler',
     'PhabricatorInfrastructureTestCase' => 'PhabricatorTestCase',
     'PhabricatorInlineCommentController' => 'PhabricatorController',
     'PhabricatorInlineCommentInterface' => 'PhabricatorMarkupInterface',
     'PhabricatorInlineCommentPreviewController' => 'PhabricatorController',
     'PhabricatorInlineSummaryView' => 'AphrontView',
     'PhabricatorJavelinLinter' => 'ArcanistLinter',
     'PhabricatorKeyValueDatabaseCache' => 'PhutilKeyValueCache',
     'PhabricatorLegalpadConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorLegalpadPHIDTypeDocument' => 'PhabricatorPHIDType',
     'PhabricatorLintEngine' => 'PhutilLintEngine',
     'PhabricatorLipsumGenerateWorkflow' => 'PhabricatorLipsumManagementWorkflow',
     'PhabricatorLipsumManagementWorkflow' => 'PhutilArgumentWorkflow',
     'PhabricatorLipsumMondrianArtist' => 'PhabricatorLipsumArtist',
     'PhabricatorLiskDAO' => 'LiskDAO',
     'PhabricatorLocalDiskFileStorageEngine' => 'PhabricatorFileStorageEngine',
     'PhabricatorLocalTimeTestCase' => 'PhabricatorTestCase',
     'PhabricatorLogoutController' => 'PhabricatorAuthController',
     'PhabricatorMacroCommentController' => 'PhabricatorMacroController',
     'PhabricatorMacroConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorMacroController' => 'PhabricatorController',
     'PhabricatorMacroDisableController' => 'PhabricatorMacroController',
     'PhabricatorMacroEditController' => 'PhabricatorMacroController',
     'PhabricatorMacroEditor' => 'PhabricatorApplicationTransactionEditor',
     'PhabricatorMacroListController' =>
     array(
       0 => 'PhabricatorMacroController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'PhabricatorMacroMailReceiver' => 'PhabricatorObjectMailReceiver',
     'PhabricatorMacroMemeController' => 'PhabricatorMacroController',
     'PhabricatorMacroMemeDialogController' => 'PhabricatorMacroController',
     'PhabricatorMacroPHIDTypeMacro' => 'PhabricatorPHIDType',
     'PhabricatorMacroQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorMacroReplyHandler' => 'PhabricatorMailReplyHandler',
     'PhabricatorMacroSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'PhabricatorMacroTransaction' => 'PhabricatorApplicationTransaction',
     'PhabricatorMacroTransactionComment' => 'PhabricatorApplicationTransactionComment',
     'PhabricatorMacroTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
     'PhabricatorMacroViewController' => 'PhabricatorMacroController',
     'PhabricatorMailImplementationAmazonSESAdapter' => 'PhabricatorMailImplementationPHPMailerLiteAdapter',
     'PhabricatorMailImplementationPHPMailerAdapter' => 'PhabricatorMailImplementationAdapter',
     'PhabricatorMailImplementationPHPMailerLiteAdapter' => 'PhabricatorMailImplementationAdapter',
     'PhabricatorMailImplementationSendGridAdapter' => 'PhabricatorMailImplementationAdapter',
     'PhabricatorMailImplementationTestAdapter' => 'PhabricatorMailImplementationAdapter',
     'PhabricatorMailManagementListInboundWorkflow' => 'PhabricatorSearchManagementWorkflow',
     'PhabricatorMailManagementListOutboundWorkflow' => 'PhabricatorSearchManagementWorkflow',
     'PhabricatorMailManagementReceiveTestWorkflow' => 'PhabricatorSearchManagementWorkflow',
     'PhabricatorMailManagementResendWorkflow' => 'PhabricatorSearchManagementWorkflow',
     'PhabricatorMailManagementSendTestWorkflow' => 'PhabricatorSearchManagementWorkflow',
     'PhabricatorMailManagementShowInboundWorkflow' => 'PhabricatorSearchManagementWorkflow',
     'PhabricatorMailManagementShowOutboundWorkflow' => 'PhabricatorSearchManagementWorkflow',
     'PhabricatorMailManagementWorkflow' => 'PhutilArgumentWorkflow',
     'PhabricatorMailReceiverTestCase' => 'PhabricatorTestCase',
     'PhabricatorMailingListPHIDTypeList' => 'PhabricatorPHIDType',
     'PhabricatorMailingListQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorMailingListSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'PhabricatorMailingListsController' => 'PhabricatorController',
     'PhabricatorMailingListsEditController' => 'PhabricatorMailingListsController',
     'PhabricatorMailingListsListController' =>
     array(
       0 => 'PhabricatorMailingListsController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'PhabricatorMainMenuGroupView' => 'AphrontView',
     'PhabricatorMainMenuIconView' => 'AphrontView',
     'PhabricatorMainMenuSearchView' => 'AphrontView',
     'PhabricatorMainMenuView' => 'AphrontView',
     'PhabricatorManiphestConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorManiphestTaskTestDataGenerator' => 'PhabricatorTestDataGenerator',
     'PhabricatorMarkupCache' => 'PhabricatorCacheDAO',
     'PhabricatorMarkupOneOff' => 'PhabricatorMarkupInterface',
     'PhabricatorMarkupPreviewController' => 'PhabricatorController',
     'PhabricatorMetaMTAActorQuery' => 'PhabricatorQuery',
     'PhabricatorMetaMTAConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorMetaMTAController' => 'PhabricatorController',
     'PhabricatorMetaMTADAO' => 'PhabricatorLiskDAO',
     'PhabricatorMetaMTAEmailBodyParserTestCase' => 'PhabricatorTestCase',
     'PhabricatorMetaMTAMail' => 'PhabricatorMetaMTADAO',
     'PhabricatorMetaMTAMailBodyTestCase' => 'PhabricatorTestCase',
     'PhabricatorMetaMTAMailTestCase' => 'PhabricatorTestCase',
     'PhabricatorMetaMTAMailingList' =>
     array(
       0 => 'PhabricatorMetaMTADAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorMetaMTAReceivedMail' => 'PhabricatorMetaMTADAO',
     'PhabricatorMetaMTAReceivedMailProcessingException' => 'Exception',
     'PhabricatorMetaMTAReceivedMailTestCase' => 'PhabricatorTestCase',
     'PhabricatorMetaMTASendGridReceiveController' => 'PhabricatorMetaMTAController',
     'PhabricatorMetaMTAWorker' => 'PhabricatorWorker',
     'PhabricatorMultiColumnExample' => 'PhabricatorUIExample',
     'PhabricatorMustVerifyEmailController' => 'PhabricatorAuthController',
     'PhabricatorMySQLConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorMySQLFileStorageEngine' => 'PhabricatorFileStorageEngine',
     'PhabricatorNamedQuery' =>
     array(
       0 => 'PhabricatorSearchDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorNamedQueryQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorNoteExample' => 'PhabricatorUIExample',
     'PhabricatorNotificationClearController' => 'PhabricatorNotificationController',
     'PhabricatorNotificationConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorNotificationController' => 'PhabricatorController',
     'PhabricatorNotificationIndividualController' => 'PhabricatorNotificationController',
     'PhabricatorNotificationListController' => 'PhabricatorNotificationController',
     'PhabricatorNotificationPanelController' => 'PhabricatorNotificationController',
     'PhabricatorNotificationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorNotificationStatusController' => 'PhabricatorNotificationController',
     'PhabricatorOAuthClientAuthorization' => 'PhabricatorOAuthServerDAO',
     'PhabricatorOAuthClientAuthorizationBaseController' => 'PhabricatorOAuthServerController',
     'PhabricatorOAuthClientAuthorizationDeleteController' => 'PhabricatorOAuthClientAuthorizationBaseController',
     'PhabricatorOAuthClientAuthorizationEditController' => 'PhabricatorOAuthClientAuthorizationBaseController',
     'PhabricatorOAuthClientAuthorizationListController' => 'PhabricatorOAuthClientAuthorizationBaseController',
     'PhabricatorOAuthClientAuthorizationQuery' => 'PhabricatorOffsetPagedQuery',
     'PhabricatorOAuthClientBaseController' => 'PhabricatorOAuthServerController',
     'PhabricatorOAuthClientDeleteController' => 'PhabricatorOAuthClientBaseController',
     'PhabricatorOAuthClientEditController' => 'PhabricatorOAuthClientBaseController',
     'PhabricatorOAuthClientListController' => 'PhabricatorOAuthClientBaseController',
     'PhabricatorOAuthClientViewController' => 'PhabricatorOAuthClientBaseController',
     'PhabricatorOAuthResponse' => 'AphrontResponse',
     'PhabricatorOAuthServerAccessToken' => 'PhabricatorOAuthServerDAO',
     'PhabricatorOAuthServerAuthController' => 'PhabricatorAuthController',
     'PhabricatorOAuthServerAuthorizationCode' => 'PhabricatorOAuthServerDAO',
     'PhabricatorOAuthServerClient' => 'PhabricatorOAuthServerDAO',
     'PhabricatorOAuthServerClientQuery' => 'PhabricatorOffsetPagedQuery',
     'PhabricatorOAuthServerController' => 'PhabricatorController',
     'PhabricatorOAuthServerDAO' => 'PhabricatorLiskDAO',
     'PhabricatorOAuthServerTestCase' => 'PhabricatorTestCase',
     'PhabricatorOAuthServerTestController' => 'PhabricatorOAuthServerController',
     'PhabricatorOAuthServerTokenController' => 'PhabricatorAuthController',
     'PhabricatorObjectHandle' => 'PhabricatorPolicyInterface',
     'PhabricatorObjectHandleStatus' => 'PhabricatorObjectHandleConstants',
     'PhabricatorObjectItemListExample' => 'PhabricatorUIExample',
     'PhabricatorObjectItemListView' => 'AphrontTagView',
     'PhabricatorObjectItemView' => 'AphrontTagView',
     'PhabricatorObjectListView' => 'AphrontView',
     'PhabricatorObjectMailReceiver' => 'PhabricatorMailReceiver',
     'PhabricatorObjectMailReceiverTestCase' => 'PhabricatorTestCase',
     'PhabricatorObjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorOffsetPagedQuery' => 'PhabricatorQuery',
     'PhabricatorOwnersConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorOwnersController' => 'PhabricatorController',
     'PhabricatorOwnersDAO' => 'PhabricatorLiskDAO',
     'PhabricatorOwnersDeleteController' => 'PhabricatorOwnersController',
     'PhabricatorOwnersDetailController' => 'PhabricatorOwnersController',
     'PhabricatorOwnersEditController' => 'PhabricatorOwnersController',
     'PhabricatorOwnersListController' => 'PhabricatorOwnersController',
     'PhabricatorOwnersOwner' => 'PhabricatorOwnersDAO',
     'PhabricatorOwnersPHIDTypePackage' => 'PhabricatorPHIDType',
     'PhabricatorOwnersPackage' =>
     array(
       0 => 'PhabricatorOwnersDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorOwnersPackageQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorOwnersPackageTestCase' => 'PhabricatorTestCase',
     'PhabricatorOwnersPath' => 'PhabricatorOwnersDAO',
     'PhabricatorPHDConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorPHPMailerConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorPagedFormExample' => 'PhabricatorUIExample',
     'PhabricatorPaste' =>
     array(
       0 => 'PhabricatorPasteDAO',
       1 => 'PhabricatorSubscribableInterface',
       2 => 'PhabricatorTokenReceiverInterface',
       3 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorPasteCommentController' => 'PhabricatorPasteController',
     'PhabricatorPasteConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorPasteController' => 'PhabricatorController',
     'PhabricatorPasteDAO' => 'PhabricatorLiskDAO',
     'PhabricatorPasteEditController' => 'PhabricatorPasteController',
     'PhabricatorPasteEditor' => 'PhabricatorApplicationTransactionEditor',
     'PhabricatorPasteListController' =>
     array(
       0 => 'PhabricatorPasteController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'PhabricatorPastePHIDTypePaste' => 'PhabricatorPHIDType',
     'PhabricatorPasteQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorPasteRemarkupRule' => 'PhabricatorRemarkupRuleObject',
     'PhabricatorPasteSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'PhabricatorPasteTestDataGenerator' => 'PhabricatorTestDataGenerator',
     'PhabricatorPasteTransaction' => 'PhabricatorApplicationTransaction',
     'PhabricatorPasteTransactionComment' => 'PhabricatorApplicationTransactionComment',
     'PhabricatorPasteTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
     'PhabricatorPasteViewController' => 'PhabricatorPasteController',
     'PhabricatorPeopleController' => 'PhabricatorController',
     'PhabricatorPeopleEditController' => 'PhabricatorPeopleController',
     'PhabricatorPeopleHovercardEventListener' => 'PhutilEventListener',
     'PhabricatorPeopleLdapController' => 'PhabricatorPeopleController',
     'PhabricatorPeopleListController' =>
     array(
       0 => 'PhabricatorPeopleController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'PhabricatorPeopleLogsController' => 'PhabricatorPeopleController',
     'PhabricatorPeoplePHIDTypeExternal' => 'PhabricatorPHIDType',
     'PhabricatorPeoplePHIDTypeUser' => 'PhabricatorPHIDType',
     'PhabricatorPeopleProfileController' => 'PhabricatorPeopleController',
     'PhabricatorPeopleProfileEditController' => 'PhabricatorPeopleController',
     'PhabricatorPeopleProfilePictureController' => 'PhabricatorPeopleController',
     'PhabricatorPeopleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorPeopleSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'PhabricatorPeopleTestDataGenerator' => 'PhabricatorTestDataGenerator',
     'PhabricatorPhameConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorPhamePHIDTypeBlog' => 'PhabricatorPHIDType',
     'PhabricatorPhamePHIDTypePost' => 'PhabricatorPHIDType',
     'PhabricatorPholioConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorPholioMockTestDataGenerator' => 'PhabricatorTestDataGenerator',
     'PhabricatorPhortuneConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorPhrequentConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorPhrictionConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorPolicies' => 'PhabricatorPolicyConstants',
     'PhabricatorPolicyAwareQuery' => 'PhabricatorOffsetPagedQuery',
     'PhabricatorPolicyAwareTestQuery' => 'PhabricatorPolicyAwareQuery',
     'PhabricatorPolicyCapability' => 'PhabricatorPolicyConstants',
     'PhabricatorPolicyConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorPolicyException' => 'Exception',
     'PhabricatorPolicyQuery' => 'PhabricatorQuery',
     'PhabricatorPolicyTestCase' => 'PhabricatorTestCase',
     'PhabricatorPolicyTestObject' => 'PhabricatorPolicyInterface',
     'PhabricatorPolicyType' => 'PhabricatorPolicyConstants',
     'PhabricatorProject' =>
     array(
       0 => 'PhabricatorProjectDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorProjectController' => 'PhabricatorController',
     'PhabricatorProjectCreateController' => 'PhabricatorProjectController',
     'PhabricatorProjectDAO' => 'PhabricatorLiskDAO',
     'PhabricatorProjectEditor' => 'PhabricatorEditor',
     'PhabricatorProjectEditorTestCase' => 'PhabricatorTestCase',
     'PhabricatorProjectListController' =>
     array(
       0 => 'PhabricatorProjectController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'PhabricatorProjectMembersEditController' => 'PhabricatorProjectController',
     'PhabricatorProjectNameCollisionException' => 'Exception',
     'PhabricatorProjectPHIDTypeProject' => 'PhabricatorPHIDType',
     'PhabricatorProjectProfile' => 'PhabricatorProjectDAO',
     'PhabricatorProjectProfileController' => 'PhabricatorProjectController',
     'PhabricatorProjectProfileEditController' => 'PhabricatorProjectController',
     'PhabricatorProjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorProjectSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'PhabricatorProjectTestDataGenerator' => 'PhabricatorTestDataGenerator',
     'PhabricatorProjectTransaction' => 'PhabricatorProjectDAO',
     'PhabricatorProjectTransactionType' => 'PhabricatorProjectConstants',
     'PhabricatorProjectUpdateController' => 'PhabricatorProjectController',
     'PhabricatorPropertyListExample' => 'PhabricatorUIExample',
     'PhabricatorPropertyListView' => 'AphrontView',
     'PhabricatorRecaptchaConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorRedirectController' => 'PhabricatorController',
     'PhabricatorRefreshCSRFController' => 'PhabricatorAuthController',
     'PhabricatorRegistrationProfile' => 'Phobject',
     'PhabricatorRemarkupControl' => 'AphrontFormTextAreaControl',
     'PhabricatorRemarkupRuleEmbedFile' => 'PhutilRemarkupRule',
     'PhabricatorRemarkupRuleImageMacro' => 'PhutilRemarkupRule',
     'PhabricatorRemarkupRuleMeme' => 'PhutilRemarkupRule',
     'PhabricatorRemarkupRuleMention' => 'PhutilRemarkupRule',
     'PhabricatorRemarkupRuleObject' => 'PhutilRemarkupRule',
     'PhabricatorRemarkupRuleYoutube' => 'PhutilRemarkupRule',
     'PhabricatorRepository' =>
     array(
       0 => 'PhabricatorRepositoryDAO',
       1 => 'PhabricatorPolicyInterface',
       2 => 'PhabricatorMarkupInterface',
     ),
     'PhabricatorRepositoryArcanistProject' =>
     array(
       0 => 'PhabricatorRepositoryDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorRepositoryArcanistProjectDeleteController' => 'PhabricatorRepositoryController',
     'PhabricatorRepositoryArcanistProjectEditController' => 'PhabricatorRepositoryController',
     'PhabricatorRepositoryArcanistProjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorRepositoryAuditRequest' => 'PhabricatorRepositoryDAO',
     'PhabricatorRepositoryBranch' => 'PhabricatorRepositoryDAO',
     'PhabricatorRepositoryCommit' =>
     array(
       0 => 'PhabricatorRepositoryDAO',
       1 => 'PhabricatorPolicyInterface',
       2 => 'PhabricatorTokenReceiverInterface',
     ),
     'PhabricatorRepositoryCommitChangeParserWorker' => 'PhabricatorRepositoryCommitParserWorker',
     'PhabricatorRepositoryCommitData' => 'PhabricatorRepositoryDAO',
     'PhabricatorRepositoryCommitHeraldWorker' => 'PhabricatorRepositoryCommitParserWorker',
     'PhabricatorRepositoryCommitMessageParserWorker' => 'PhabricatorRepositoryCommitParserWorker',
     'PhabricatorRepositoryCommitOwnersWorker' => 'PhabricatorRepositoryCommitParserWorker',
     'PhabricatorRepositoryCommitParserWorker' => 'PhabricatorWorker',
     'PhabricatorRepositoryCommitSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
     'PhabricatorRepositoryConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorRepositoryController' => 'PhabricatorController',
     'PhabricatorRepositoryCreateController' => 'PhabricatorRepositoryController',
     'PhabricatorRepositoryDAO' => 'PhabricatorLiskDAO',
     'PhabricatorRepositoryDeleteController' => 'PhabricatorRepositoryController',
     'PhabricatorRepositoryDiscoveryEngine' => 'PhabricatorRepositoryEngine',
     'PhabricatorRepositoryEditController' => 'PhabricatorRepositoryController',
     'PhabricatorRepositoryEditor' => 'PhabricatorApplicationTransactionEditor',
     'PhabricatorRepositoryGitCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
     'PhabricatorRepositoryGitCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
     'PhabricatorRepositoryListController' => 'PhabricatorRepositoryController',
     'PhabricatorRepositoryManagementDeleteWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
     'PhabricatorRepositoryManagementDiscoverWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
     'PhabricatorRepositoryManagementListWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
     'PhabricatorRepositoryManagementPullWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
     'PhabricatorRepositoryManagementWorkflow' => 'PhutilArgumentWorkflow',
     'PhabricatorRepositoryMercurialCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
     'PhabricatorRepositoryMercurialCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
     'PhabricatorRepositoryPHIDTypeArcanistProject' => 'PhabricatorPHIDType',
     'PhabricatorRepositoryPHIDTypeCommit' => 'PhabricatorPHIDType',
     'PhabricatorRepositoryPHIDTypeRepository' => 'PhabricatorPHIDType',
     'PhabricatorRepositoryPullEngine' => 'PhabricatorRepositoryEngine',
     'PhabricatorRepositoryPullLocalDaemon' => 'PhabricatorDaemon',
     'PhabricatorRepositoryQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorRepositoryShortcut' => 'PhabricatorRepositoryDAO',
     'PhabricatorRepositorySvnCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
     'PhabricatorRepositorySvnCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
     'PhabricatorRepositorySymbol' => 'PhabricatorRepositoryDAO',
     'PhabricatorRepositoryTestCase' => 'PhabricatorTestCase',
     'PhabricatorRepositoryTransaction' => 'PhabricatorApplicationTransaction',
     'PhabricatorRepositoryTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
     'PhabricatorS3FileStorageEngine' => 'PhabricatorFileStorageEngine',
     'PhabricatorSSHWorkflow' => 'PhutilArgumentWorkflow',
     'PhabricatorSavedQuery' =>
     array(
       0 => 'PhabricatorSearchDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorSavedQueryQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorSearchAttachController' => 'PhabricatorSearchBaseController',
     'PhabricatorSearchBaseController' => 'PhabricatorController',
     'PhabricatorSearchConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorSearchController' => 'PhabricatorSearchBaseController',
     'PhabricatorSearchDAO' => 'PhabricatorLiskDAO',
     'PhabricatorSearchDeleteController' => 'PhabricatorSearchBaseController',
     'PhabricatorSearchDocument' => 'PhabricatorSearchDAO',
     'PhabricatorSearchDocumentField' => 'PhabricatorSearchDAO',
     'PhabricatorSearchDocumentRelationship' => 'PhabricatorSearchDAO',
     'PhabricatorSearchEditController' => 'PhabricatorSearchBaseController',
     'PhabricatorSearchEngineElastic' => 'PhabricatorSearchEngine',
     'PhabricatorSearchEngineMySQL' => 'PhabricatorSearchEngine',
     'PhabricatorSearchHovercardController' => 'PhabricatorSearchBaseController',
     'PhabricatorSearchManagementIndexWorkflow' => 'PhabricatorSearchManagementWorkflow',
     'PhabricatorSearchManagementWorkflow' => 'PhutilArgumentWorkflow',
     'PhabricatorSearchOrderController' => 'PhabricatorSearchBaseController',
     'PhabricatorSearchQuery' => 'PhabricatorSearchDAO',
     'PhabricatorSearchResultView' => 'AphrontView',
     'PhabricatorSearchSelectController' => 'PhabricatorSearchBaseController',
     'PhabricatorSecurityConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorSendGridConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorSettingsAdjustController' => 'PhabricatorController',
     'PhabricatorSettingsMainController' => 'PhabricatorController',
     'PhabricatorSettingsPanelAccount' => 'PhabricatorSettingsPanel',
     'PhabricatorSettingsPanelConduit' => 'PhabricatorSettingsPanel',
     'PhabricatorSettingsPanelConpherencePreferences' => 'PhabricatorSettingsPanel',
     'PhabricatorSettingsPanelDeveloperPreferences' => 'PhabricatorSettingsPanel',
     'PhabricatorSettingsPanelDiffPreferences' => 'PhabricatorSettingsPanel',
     'PhabricatorSettingsPanelDisplayPreferences' => 'PhabricatorSettingsPanel',
     'PhabricatorSettingsPanelEmailAddresses' => 'PhabricatorSettingsPanel',
     'PhabricatorSettingsPanelEmailPreferences' => 'PhabricatorSettingsPanel',
     'PhabricatorSettingsPanelExternalAccounts' => 'PhabricatorSettingsPanel',
     'PhabricatorSettingsPanelHomePreferences' => 'PhabricatorSettingsPanel',
     'PhabricatorSettingsPanelPassword' => 'PhabricatorSettingsPanel',
     'PhabricatorSettingsPanelSSHKeys' => 'PhabricatorSettingsPanel',
     'PhabricatorSettingsPanelSearchPreferences' => 'PhabricatorSettingsPanel',
     'PhabricatorSetupCheckAPC' => 'PhabricatorSetupCheck',
     'PhabricatorSetupCheckAuth' => 'PhabricatorSetupCheck',
     'PhabricatorSetupCheckBaseURI' => 'PhabricatorSetupCheck',
     'PhabricatorSetupCheckBinaries' => 'PhabricatorSetupCheck',
     'PhabricatorSetupCheckDatabase' => 'PhabricatorSetupCheck',
     'PhabricatorSetupCheckExtensions' => 'PhabricatorSetupCheck',
     'PhabricatorSetupCheckExtraConfig' => 'PhabricatorSetupCheck',
     'PhabricatorSetupCheckFileinfo' => 'PhabricatorSetupCheck',
     'PhabricatorSetupCheckGD' => 'PhabricatorSetupCheck',
     'PhabricatorSetupCheckImagemagick' => 'PhabricatorSetupCheck',
     'PhabricatorSetupCheckInvalidConfig' => 'PhabricatorSetupCheck',
     'PhabricatorSetupCheckMail' => 'PhabricatorSetupCheck',
     'PhabricatorSetupCheckMySQL' => 'PhabricatorSetupCheck',
     'PhabricatorSetupCheckPHPConfig' => 'PhabricatorSetupCheck',
     'PhabricatorSetupCheckPath' => 'PhabricatorSetupCheck',
     'PhabricatorSetupCheckPygment' => 'PhabricatorSetupCheck',
     'PhabricatorSetupCheckStorage' => 'PhabricatorSetupCheck',
     'PhabricatorSetupCheckTimezone' => 'PhabricatorSetupCheck',
     'PhabricatorSetupIssueExample' => 'PhabricatorUIExample',
     'PhabricatorSetupIssueView' => 'AphrontView',
     'PhabricatorSlowvoteChoice' => 'PhabricatorSlowvoteDAO',
     'PhabricatorSlowvoteComment' => 'PhabricatorSlowvoteDAO',
     'PhabricatorSlowvoteCommentController' => 'PhabricatorSlowvoteController',
     'PhabricatorSlowvoteController' => 'PhabricatorController',
     'PhabricatorSlowvoteDAO' => 'PhabricatorLiskDAO',
     'PhabricatorSlowvoteEditController' => 'PhabricatorSlowvoteController',
     'PhabricatorSlowvoteEditor' => 'PhabricatorApplicationTransactionEditor',
     'PhabricatorSlowvoteListController' =>
     array(
       0 => 'PhabricatorSlowvoteController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'PhabricatorSlowvoteOption' => 'PhabricatorSlowvoteDAO',
     'PhabricatorSlowvotePHIDTypePoll' => 'PhabricatorPHIDType',
     'PhabricatorSlowvotePoll' =>
     array(
       0 => 'PhabricatorSlowvoteDAO',
       1 => 'PhabricatorPolicyInterface',
       2 => 'PhabricatorSubscribableInterface',
       3 => 'PhabricatorTokenReceiverInterface',
     ),
     'PhabricatorSlowvotePollController' => 'PhabricatorSlowvoteController',
     'PhabricatorSlowvoteQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorSlowvoteSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'PhabricatorSlowvoteTransaction' => 'PhabricatorApplicationTransaction',
     'PhabricatorSlowvoteTransactionComment' => 'PhabricatorApplicationTransactionComment',
     'PhabricatorSlowvoteTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
     'PhabricatorSlowvoteVoteController' => 'PhabricatorSlowvoteController',
     'PhabricatorSlugTestCase' => 'PhabricatorTestCase',
     'PhabricatorSortTableExample' => 'PhabricatorUIExample',
     'PhabricatorSourceCodeView' => 'AphrontView',
     'PhabricatorStandardCustomField' => 'PhabricatorCustomField',
     'PhabricatorStandardPageView' => 'PhabricatorBarePageView',
     'PhabricatorStatusController' => 'PhabricatorController',
     'PhabricatorStorageManagementDatabasesWorkflow' => 'PhabricatorStorageManagementWorkflow',
     'PhabricatorStorageManagementDestroyWorkflow' => 'PhabricatorStorageManagementWorkflow',
     'PhabricatorStorageManagementDumpWorkflow' => 'PhabricatorStorageManagementWorkflow',
     'PhabricatorStorageManagementProbeWorkflow' => 'PhabricatorStorageManagementWorkflow',
     'PhabricatorStorageManagementStatusWorkflow' => 'PhabricatorStorageManagementWorkflow',
     'PhabricatorStorageManagementUpgradeWorkflow' => 'PhabricatorStorageManagementWorkflow',
     'PhabricatorStorageManagementWorkflow' => 'PhutilArgumentWorkflow',
     'PhabricatorSubscribersQuery' => 'PhabricatorQuery',
     'PhabricatorSubscriptionsEditController' => 'PhabricatorController',
     'PhabricatorSubscriptionsEditor' => 'PhabricatorEditor',
     'PhabricatorSubscriptionsUIEventListener' => 'PhutilEventListener',
     'PhabricatorSymbolNameLinter' => 'ArcanistXHPASTLintNamingHook',
     'PhabricatorSyntaxHighlightingConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorTagExample' => 'PhabricatorUIExample',
     'PhabricatorTagView' => 'AphrontView',
     'PhabricatorTaskmasterDaemon' => 'PhabricatorDaemon',
     'PhabricatorTestCase' => 'ArcanistPhutilTestCase',
     'PhabricatorTestStorageEngine' => 'PhabricatorFileStorageEngine',
     'PhabricatorTestWorker' => 'PhabricatorWorker',
     'PhabricatorTimeTestCase' => 'PhabricatorTestCase',
     'PhabricatorTimelineEventView' => 'AphrontView',
     'PhabricatorTimelineExample' => 'PhabricatorUIExample',
     'PhabricatorTimelineView' => 'AphrontView',
     'PhabricatorToken' =>
     array(
       0 => 'PhabricatorTokenDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorTokenController' => 'PhabricatorController',
     'PhabricatorTokenCount' => 'PhabricatorTokenDAO',
     'PhabricatorTokenCountQuery' => 'PhabricatorOffsetPagedQuery',
     'PhabricatorTokenDAO' => 'PhabricatorLiskDAO',
     'PhabricatorTokenGiveController' => 'PhabricatorTokenController',
     'PhabricatorTokenGiven' =>
     array(
       0 => 'PhabricatorTokenDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorTokenGivenController' => 'PhabricatorTokenController',
     'PhabricatorTokenGivenEditor' => 'PhabricatorEditor',
     'PhabricatorTokenGivenFeedStory' => 'PhabricatorFeedStory',
     'PhabricatorTokenGivenQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorTokenLeaderController' => 'PhabricatorTokenController',
     'PhabricatorTokenQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorTokenReceiverQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhabricatorTokenUIEventListener' => 'PhutilEventListener',
     'PhabricatorTransactionView' => 'AphrontView',
     'PhabricatorTransformedFile' => 'PhabricatorFileDAO',
     'PhabricatorTranslationsConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorTrivialTestCase' => 'PhabricatorTestCase',
     'PhabricatorTwoColumnExample' => 'PhabricatorUIExample',
     'PhabricatorTypeaheadCommonDatasourceController' => 'PhabricatorTypeaheadDatasourceController',
     'PhabricatorTypeaheadDatasourceController' => 'PhabricatorController',
     'PhabricatorUIExampleRenderController' => 'PhabricatorController',
     'PhabricatorUIListFilterExample' => 'PhabricatorUIExample',
     'PhabricatorUINotificationExample' => 'PhabricatorUIExample',
     'PhabricatorUIPagerExample' => 'PhabricatorUIExample',
     'PhabricatorUIStatusExample' => 'PhabricatorUIExample',
     'PhabricatorUITooltipExample' => 'PhabricatorUIExample',
     'PhabricatorUnitsTestCase' => 'PhabricatorTestCase',
     'PhabricatorUser' =>
     array(
       0 => 'PhabricatorUserDAO',
       1 => 'PhutilPerson',
       2 => 'PhabricatorPolicyInterface',
       3 => 'PhabricatorCustomFieldInterface',
     ),
     'PhabricatorUserBlurbField' => 'PhabricatorUserCustomField',
     'PhabricatorUserConfigOptions' => 'PhabricatorApplicationConfigOptions',
     'PhabricatorUserConfiguredCustomField' =>
     array(
       0 => 'PhabricatorUserCustomField',
       1 => 'PhabricatorStandardCustomFieldInterface',
     ),
     'PhabricatorUserConfiguredCustomFieldStorage' => 'PhabricatorCustomFieldStorage',
     'PhabricatorUserCustomField' => 'PhabricatorCustomField',
     'PhabricatorUserDAO' => 'PhabricatorLiskDAO',
     'PhabricatorUserEditor' => 'PhabricatorEditor',
     'PhabricatorUserEmail' => 'PhabricatorUserDAO',
     'PhabricatorUserLog' => 'PhabricatorUserDAO',
     'PhabricatorUserPreferences' => 'PhabricatorUserDAO',
     'PhabricatorUserProfile' => 'PhabricatorUserDAO',
     'PhabricatorUserProfileEditor' => 'PhabricatorApplicationTransactionEditor',
     'PhabricatorUserRealNameField' => 'PhabricatorUserCustomField',
     'PhabricatorUserRolesField' => 'PhabricatorUserCustomField',
     'PhabricatorUserSSHKey' => 'PhabricatorUserDAO',
     'PhabricatorUserSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
     'PhabricatorUserSinceField' => 'PhabricatorUserCustomField',
     'PhabricatorUserStatus' => 'PhabricatorUserDAO',
     'PhabricatorUserStatusField' => 'PhabricatorUserCustomField',
     'PhabricatorUserStatusInvalidEpochException' => 'Exception',
     'PhabricatorUserStatusOverlapException' => 'Exception',
     'PhabricatorUserTestCase' => 'PhabricatorTestCase',
     'PhabricatorUserTitleField' => 'PhabricatorUserCustomField',
     'PhabricatorUserTransaction' => 'PhabricatorApplicationTransaction',
     'PhabricatorWorkboardExample' => 'PhabricatorUIExample',
     'PhabricatorWorkboardView' => 'AphrontView',
     'PhabricatorWorkerActiveTask' => 'PhabricatorWorkerTask',
     'PhabricatorWorkerArchiveTask' => 'PhabricatorWorkerTask',
     'PhabricatorWorkerDAO' => 'PhabricatorLiskDAO',
     'PhabricatorWorkerLeaseQuery' => 'PhabricatorQuery',
     'PhabricatorWorkerPermanentFailureException' => 'Exception',
     'PhabricatorWorkerTask' => 'PhabricatorWorkerDAO',
     'PhabricatorWorkerTaskData' => 'PhabricatorWorkerDAO',
     'PhabricatorWorkerTaskDetailController' => 'PhabricatorDaemonController',
     'PhabricatorWorkerTaskUpdateController' => 'PhabricatorDaemonController',
     'PhabricatorWorkerTestCase' => 'PhabricatorTestCase',
     'PhabricatorWorkingCopyDiscoveryTestCase' => 'PhabricatorWorkingCopyTestCase',
     'PhabricatorWorkingCopyPullTestCase' => 'PhabricatorWorkingCopyTestCase',
     'PhabricatorWorkingCopyTestCase' => 'PhabricatorTestCase',
     'PhabricatorWorkpanelView' => 'AphrontView',
     'PhabricatorXHPASTViewController' => 'PhabricatorController',
     'PhabricatorXHPASTViewDAO' => 'PhabricatorLiskDAO',
     'PhabricatorXHPASTViewFrameController' => 'PhabricatorXHPASTViewController',
     'PhabricatorXHPASTViewFramesetController' => 'PhabricatorXHPASTViewController',
     'PhabricatorXHPASTViewInputController' => 'PhabricatorXHPASTViewPanelController',
     'PhabricatorXHPASTViewPanelController' => 'PhabricatorXHPASTViewController',
     'PhabricatorXHPASTViewParseTree' => 'PhabricatorXHPASTViewDAO',
     'PhabricatorXHPASTViewRunController' => 'PhabricatorXHPASTViewController',
     'PhabricatorXHPASTViewStreamController' => 'PhabricatorXHPASTViewPanelController',
     'PhabricatorXHPASTViewTreeController' => 'PhabricatorXHPASTViewPanelController',
     'PhabricatorXHProfController' => 'PhabricatorController',
     'PhabricatorXHProfDAO' => 'PhabricatorLiskDAO',
     'PhabricatorXHProfProfileController' => 'PhabricatorXHProfController',
     'PhabricatorXHProfProfileSymbolView' => 'PhabricatorXHProfProfileView',
     'PhabricatorXHProfProfileTopLevelView' => 'PhabricatorXHProfProfileView',
     'PhabricatorXHProfProfileView' => 'AphrontView',
     'PhabricatorXHProfSample' => 'PhabricatorXHProfDAO',
     'PhabricatorXHProfSampleListController' => 'PhabricatorXHProfController',
     'PhameBasicBlogSkin' => 'PhameBlogSkin',
     'PhameBasicTemplateBlogSkin' => 'PhameBasicBlogSkin',
     'PhameBlog' =>
     array(
       0 => 'PhameDAO',
       1 => 'PhabricatorPolicyInterface',
       2 => 'PhabricatorMarkupInterface',
     ),
     'PhameBlogDeleteController' => 'PhameController',
     'PhameBlogEditController' => 'PhameController',
     'PhameBlogFeedController' => 'PhameController',
     'PhameBlogListController' => 'PhameController',
     'PhameBlogLiveController' => 'PhameController',
     'PhameBlogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhameBlogSkin' => 'PhabricatorController',
     'PhameBlogViewController' => 'PhameController',
     'PhameController' => 'PhabricatorController',
     'PhameDAO' => 'PhabricatorLiskDAO',
     'PhamePost' =>
     array(
       0 => 'PhameDAO',
       1 => 'PhabricatorPolicyInterface',
       2 => 'PhabricatorMarkupInterface',
       3 => 'PhabricatorTokenReceiverInterface',
     ),
     'PhamePostDeleteController' => 'PhameController',
     'PhamePostEditController' => 'PhameController',
     'PhamePostFramedController' => 'PhameController',
     'PhamePostListController' => 'PhameController',
     'PhamePostNewController' => 'PhameController',
     'PhamePostNotLiveController' => 'PhameController',
     'PhamePostPreviewController' => 'PhameController',
     'PhamePostPublishController' => 'PhameController',
     'PhamePostQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhamePostUnpublishController' => 'PhameController',
     'PhamePostView' => 'AphrontView',
     'PhamePostViewController' => 'PhameController',
     'PhameResourceController' => 'CelerityResourceController',
     'PhluxController' => 'PhabricatorController',
     'PhluxDAO' => 'PhabricatorLiskDAO',
     'PhluxEditController' => 'PhluxController',
     'PhluxListController' => 'PhluxController',
     'PhluxPHIDTypeVariable' => 'PhabricatorPHIDType',
     'PhluxTransaction' => 'PhabricatorApplicationTransaction',
     'PhluxTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
     'PhluxVariable' =>
     array(
       0 => 'PhluxDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhluxVariableEditor' => 'PhabricatorApplicationTransactionEditor',
     'PhluxVariableQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhluxViewController' => 'PhluxController',
     'PholioController' => 'PhabricatorController',
     'PholioDAO' => 'PhabricatorLiskDAO',
     'PholioImage' =>
     array(
       0 => 'PholioDAO',
       1 => 'PhabricatorMarkupInterface',
       2 => 'PhabricatorPolicyInterface',
     ),
     'PholioImageHistoryController' => 'PholioController',
     'PholioImageQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PholioImageUploadController' => 'PholioController',
     'PholioInlineCommentEditView' => 'AphrontView',
     'PholioInlineCommentSaveView' => 'AphrontView',
     'PholioInlineCommentView' => 'AphrontView',
     'PholioInlineController' => 'PholioController',
     'PholioInlineDeleteController' => 'PholioController',
     'PholioInlineEditController' => 'PholioController',
     'PholioInlineSaveController' => 'PholioController',
     'PholioInlineThumbController' => 'PholioController',
     'PholioInlineViewController' => 'PholioController',
     'PholioMock' =>
     array(
       0 => 'PholioDAO',
       1 => 'PhabricatorMarkupInterface',
       2 => 'PhabricatorPolicyInterface',
       3 => 'PhabricatorSubscribableInterface',
       4 => 'PhabricatorTokenReceiverInterface',
       5 => 'PhabricatorApplicationTransactionInterface',
     ),
     'PholioMockCommentController' => 'PholioController',
     'PholioMockEditController' => 'PholioController',
     'PholioMockEditor' => 'PhabricatorApplicationTransactionEditor',
     'PholioMockEmbedView' => 'AphrontView',
     'PholioMockImagesView' => 'AphrontView',
     'PholioMockListController' =>
     array(
       0 => 'PholioController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'PholioMockMailReceiver' => 'PhabricatorObjectMailReceiver',
     'PholioMockQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PholioMockSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'PholioMockViewController' => 'PholioController',
     'PholioPHIDTypeImage' => 'PhabricatorPHIDType',
     'PholioPHIDTypeMock' => 'PhabricatorPHIDType',
     'PholioRemarkupRule' => 'PhabricatorRemarkupRuleObject',
     'PholioReplyHandler' => 'PhabricatorMailReplyHandler',
     'PholioSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
     'PholioTransaction' => 'PhabricatorApplicationTransaction',
     'PholioTransactionComment' => 'PhabricatorApplicationTransactionComment',
     'PholioTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
     'PholioTransactionType' => 'PholioConstants',
     'PholioTransactionView' => 'PhabricatorApplicationTransactionView',
     'PholioUploadedImageView' => 'AphrontView',
     'PhortuneAccount' =>
     array(
       0 => 'PhortuneDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhortuneAccountBuyController' => 'PhortuneController',
     'PhortuneAccountEditor' => 'PhabricatorApplicationTransactionEditor',
     'PhortuneAccountQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhortuneAccountTransaction' => 'PhabricatorApplicationTransaction',
     'PhortuneAccountTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
     'PhortuneAccountViewController' => 'PhortuneController',
     'PhortuneBalancedPaymentProvider' => 'PhortunePaymentProvider',
     'PhortuneCart' => 'PhortuneDAO',
     'PhortuneCharge' => 'PhortuneDAO',
     'PhortuneController' => 'PhabricatorController',
     'PhortuneCurrencyTestCase' => 'PhabricatorTestCase',
     'PhortuneDAO' => 'PhabricatorLiskDAO',
     'PhortuneErrCode' => 'PhortuneConstants',
     'PhortuneLandingController' => 'PhortuneController',
     'PhortuneMonthYearExpiryControl' => 'AphrontFormControl',
     'PhortuneMultiplePaymentProvidersException' => 'Exception',
     'PhortuneNoPaymentProviderException' => 'Exception',
     'PhortuneNotImplementedException' => 'Exception',
     'PhortunePaymentMethod' =>
     array(
       0 => 'PhortuneDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhortunePaymentMethodEditController' => 'PhortuneController',
     'PhortunePaymentMethodListController' => 'PhabricatorController',
     'PhortunePaymentMethodQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhortunePaymentMethodViewController' => 'PhabricatorController',
     'PhortunePaymentProviderTestCase' => 'PhabricatorTestCase',
     'PhortunePaypalPaymentProvider' => 'PhortunePaymentProvider',
     'PhortuneProduct' =>
     array(
       0 => 'PhortuneDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhortuneProductEditController' => 'PhabricatorController',
     'PhortuneProductEditor' => 'PhabricatorApplicationTransactionEditor',
     'PhortuneProductListController' => 'PhabricatorController',
     'PhortuneProductQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhortuneProductTransaction' => 'PhabricatorApplicationTransaction',
     'PhortuneProductTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
     'PhortuneProductViewController' => 'PhortuneController',
     'PhortuneProviderController' => 'PhortuneController',
     'PhortunePurchase' => 'PhortuneDAO',
     'PhortuneStripePaymentProvider' => 'PhortunePaymentProvider',
     'PhortuneTestExtraPaymentProvider' => 'PhortunePaymentProvider',
     'PhortuneTestPaymentProvider' => 'PhortunePaymentProvider',
     'PhortuneWePayPaymentProvider' => 'PhortunePaymentProvider',
     'PhrequentController' => 'PhabricatorController',
     'PhrequentDAO' => 'PhabricatorLiskDAO',
     'PhrequentListController' => 'PhrequentController',
     'PhrequentTrackController' => 'PhrequentController',
     'PhrequentUIEventListener' => 'PhutilEventListener',
     'PhrequentUserTime' => 'PhrequentDAO',
     'PhrequentUserTimeQuery' => 'PhabricatorOffsetPagedQuery',
     'PhrictionActionConstants' => 'PhrictionConstants',
     'PhrictionActionMenuEventListener' => 'PhutilEventListener',
     'PhrictionChangeType' => 'PhrictionConstants',
     'PhrictionContent' =>
     array(
       0 => 'PhrictionDAO',
       1 => 'PhabricatorMarkupInterface',
     ),
     'PhrictionController' => 'PhabricatorController',
     'PhrictionDAO' => 'PhabricatorLiskDAO',
     'PhrictionDeleteController' => 'PhrictionController',
     'PhrictionDiffController' => 'PhrictionController',
     'PhrictionDocument' =>
     array(
       0 => 'PhrictionDAO',
       1 => 'PhabricatorPolicyInterface',
       2 => 'PhabricatorSubscribableInterface',
       3 => 'PhabricatorTokenReceiverInterface',
     ),
     'PhrictionDocumentController' => 'PhrictionController',
     'PhrictionDocumentEditor' => 'PhabricatorEditor',
     'PhrictionDocumentPreviewController' => 'PhrictionController',
     'PhrictionDocumentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PhrictionDocumentStatus' => 'PhrictionConstants',
     'PhrictionDocumentTestCase' => 'PhabricatorTestCase',
     'PhrictionEditController' => 'PhrictionController',
     'PhrictionHistoryController' => 'PhrictionController',
     'PhrictionListController' =>
     array(
       0 => 'PhrictionController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'PhrictionMoveController' => 'PhrictionController',
     'PhrictionNewController' => 'PhrictionController',
     'PhrictionPHIDTypeDocument' => 'PhabricatorPHIDType',
     'PhrictionRemarkupRule' => 'PhutilRemarkupRule',
     'PhrictionSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'PhrictionSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
     'PonderAddAnswerView' => 'AphrontView',
     'PonderAnswer' =>
     array(
       0 => 'PonderDAO',
       1 => 'PhabricatorMarkupInterface',
       2 => 'PonderVotableInterface',
       3 => 'PhabricatorPolicyInterface',
       4 => 'PhabricatorSubscribableInterface',
       5 => 'PhabricatorTokenReceiverInterface',
     ),
     'PonderAnswerCommentController' => 'PonderController',
     'PonderAnswerEditController' => 'PonderController',
     'PonderAnswerEditor' => 'PhabricatorApplicationTransactionEditor',
     'PonderAnswerHistoryController' => 'PonderController',
     'PonderAnswerQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PonderAnswerSaveController' => 'PonderController',
     'PonderAnswerTransaction' => 'PhabricatorApplicationTransaction',
     'PonderAnswerTransactionComment' => 'PhabricatorApplicationTransactionComment',
     'PonderAnswerTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
     'PonderAnswerViewController' => 'PonderController',
     'PonderComment' =>
     array(
       0 => 'PonderDAO',
       1 => 'PhabricatorMarkupInterface',
     ),
     'PonderCommentQuery' => 'PhabricatorQuery',
     'PonderController' => 'PhabricatorController',
     'PonderDAO' => 'PhabricatorLiskDAO',
     'PonderPHIDTypeAnswer' => 'PhabricatorPHIDType',
     'PonderPHIDTypeQuestion' => 'PhabricatorPHIDType',
     'PonderQuestion' =>
     array(
       0 => 'PonderDAO',
       1 => 'PhabricatorMarkupInterface',
       2 => 'PonderVotableInterface',
       3 => 'PhabricatorSubscribableInterface',
       4 => 'PhabricatorPolicyInterface',
       5 => 'PhabricatorTokenReceiverInterface',
     ),
     'PonderQuestionCommentController' => 'PonderController',
     'PonderQuestionEditController' => 'PonderController',
     'PonderQuestionEditor' => 'PhabricatorApplicationTransactionEditor',
     'PonderQuestionHistoryController' => 'PonderController',
     'PonderQuestionListController' =>
     array(
       0 => 'PonderController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'PonderQuestionMailReceiver' => 'PhabricatorObjectMailReceiver',
     'PonderQuestionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'PonderQuestionReplyHandler' => 'PhabricatorMailReplyHandler',
     'PonderQuestionSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'PonderQuestionStatus' => 'PonderConstants',
     'PonderQuestionStatusController' => 'PonderController',
     'PonderQuestionTransaction' => 'PhabricatorApplicationTransaction',
     'PonderQuestionTransactionComment' => 'PhabricatorApplicationTransactionComment',
     'PonderQuestionTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
     'PonderQuestionViewController' => 'PonderController',
     'PonderRemarkupRule' => 'PhabricatorRemarkupRuleObject',
     'PonderSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
     'PonderVotableView' => 'AphrontView',
     'PonderVote' => 'PonderConstants',
     'PonderVoteEditor' => 'PhabricatorEditor',
     'PonderVoteSaveController' => 'PonderController',
     'ProjectRemarkupRule' => 'PhabricatorRemarkupRuleObject',
     'QueryFormattingTestCase' => 'PhabricatorTestCase',
     'ReleephAuthorFieldSpecification' => 'ReleephFieldSpecification',
     'ReleephBranch' =>
     array(
       0 => 'ReleephDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'ReleephBranchAccessController' => 'ReleephProjectController',
     'ReleephBranchCommitFieldSpecification' => 'ReleephFieldSpecification',
     'ReleephBranchCreateController' => 'ReleephProjectController',
     'ReleephBranchEditController' => 'ReleephProjectController',
     'ReleephBranchEditor' => 'PhabricatorEditor',
     'ReleephBranchHistoryController' => 'ReleephProjectController',
     'ReleephBranchNamePreviewController' => 'ReleephController',
     'ReleephBranchPreviewView' => 'AphrontFormControl',
     'ReleephBranchQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'ReleephBranchSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'ReleephBranchTransaction' => 'PhabricatorApplicationTransaction',
     'ReleephBranchTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
     'ReleephBranchViewController' =>
     array(
       0 => 'ReleephProjectController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'ReleephCommitFinderException' => 'Exception',
     'ReleephCommitMessageFieldSpecification' => 'ReleephFieldSpecification',
     'ReleephController' => 'PhabricatorController',
     'ReleephDAO' => 'PhabricatorLiskDAO',
     'ReleephDefaultFieldSelector' => 'ReleephFieldSelector',
     'ReleephDefaultUserView' => 'ReleephUserView',
     'ReleephDiffChurnFieldSpecification' => 'ReleephFieldSpecification',
     'ReleephDiffMessageFieldSpecification' => 'ReleephFieldSpecification',
     'ReleephDiffSizeFieldSpecification' => 'ReleephFieldSpecification',
     'ReleephFieldParseException' => 'Exception',
     'ReleephFieldSpecification' =>
     array(
       0 => 'PhabricatorCustomField',
       1 => 'PhabricatorMarkupInterface',
     ),
     'ReleephIntentFieldSpecification' => 'ReleephFieldSpecification',
     'ReleephLevelFieldSpecification' => 'ReleephFieldSpecification',
     'ReleephOriginalCommitFieldSpecification' => 'ReleephFieldSpecification',
     'ReleephPHIDTypeBranch' => 'PhabricatorPHIDType',
     'ReleephPHIDTypeProject' => 'PhabricatorPHIDType',
     'ReleephPHIDTypeRequest' => 'PhabricatorPHIDType',
     'ReleephProject' =>
     array(
       0 => 'ReleephDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'ReleephProjectActionController' => 'ReleephProjectController',
     'ReleephProjectController' => 'ReleephController',
     'ReleephProjectCreateController' => 'ReleephProjectController',
     'ReleephProjectEditController' => 'ReleephProjectController',
     'ReleephProjectHistoryController' => 'ReleephProjectController',
     'ReleephProjectListController' =>
     array(
       0 => 'ReleephController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'ReleephProjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'ReleephProjectSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'ReleephProjectTransaction' => 'PhabricatorApplicationTransaction',
     'ReleephProjectTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
     'ReleephProjectViewController' =>
     array(
       0 => 'ReleephProjectController',
       1 => 'PhabricatorApplicationSearchResultsControllerInterface',
     ),
     'ReleephReasonFieldSpecification' => 'ReleephFieldSpecification',
     'ReleephRequest' =>
     array(
       0 => 'ReleephDAO',
       1 => 'PhabricatorPolicyInterface',
       2 => 'PhabricatorCustomFieldInterface',
     ),
     'ReleephRequestActionController' => 'ReleephProjectController',
     'ReleephRequestCommentController' => 'ReleephProjectController',
     'ReleephRequestDifferentialCreateController' => 'ReleephProjectController',
     'ReleephRequestEditController' => 'ReleephProjectController',
     'ReleephRequestHeaderListView' => 'AphrontView',
     'ReleephRequestHeaderView' => 'AphrontView',
     'ReleephRequestIntentsView' => 'AphrontView',
     'ReleephRequestMailReceiver' => 'PhabricatorObjectMailReceiver',
     'ReleephRequestQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
     'ReleephRequestReplyHandler' => 'PhabricatorMailReplyHandler',
     'ReleephRequestSearchEngine' => 'PhabricatorApplicationSearchEngine',
     'ReleephRequestStatusView' => 'AphrontView',
     'ReleephRequestTransaction' => 'PhabricatorApplicationTransaction',
     'ReleephRequestTransactionComment' => 'PhabricatorApplicationTransactionComment',
     'ReleephRequestTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
     'ReleephRequestTransactionalEditor' => 'PhabricatorApplicationTransactionEditor',
     'ReleephRequestTypeaheadControl' => 'AphrontFormControl',
     'ReleephRequestTypeaheadController' => 'PhabricatorTypeaheadDatasourceController',
     'ReleephRequestViewController' => 'ReleephProjectController',
     'ReleephRequestorFieldSpecification' => 'ReleephFieldSpecification',
     'ReleephRevisionFieldSpecification' => 'ReleephFieldSpecification',
     'ReleephSeverityFieldSpecification' => 'ReleephLevelFieldSpecification',
     'ReleephStatusFieldSpecification' => 'ReleephFieldSpecification',
     'ReleephSummaryFieldSpecification' => 'ReleephFieldSpecification',
     'ReleephUserView' => 'AphrontView',
     'SlowvoteEmbedView' => 'AphrontView',
     'SlowvoteRemarkupRule' => 'PhabricatorRemarkupRuleObject',
   ),
 ));
diff --git a/src/applications/audit/controller/PhabricatorAuditListController.php b/src/applications/audit/controller/PhabricatorAuditListController.php
index ce2667dc7..41823d76a 100644
--- a/src/applications/audit/controller/PhabricatorAuditListController.php
+++ b/src/applications/audit/controller/PhabricatorAuditListController.php
@@ -1,503 +1,502 @@
 <?php
 
 final class PhabricatorAuditListController extends PhabricatorAuditController {
 
   private $name;
   private $filterStatus;
 
   public function willProcessRequest(array $data) {
     $this->filter = idx($data, 'filter');
     $this->name   = idx($data, 'name');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $nav = $this->buildSideNavView();
 
     if ($request->isFormPost()) {
       // If the list filter is POST'ed, redirect to GET so the page can be
       // bookmarked.
       $uri = $request->getRequestURI();
       $phid = head($request->getArr('set_phid'));
       $user = id(new PhabricatorUser())->loadOneWhere(
         'phid = %s',
         $phid);
 
       $uri = $request->getRequestURI();
       if ($user) {
         $username = phutil_escape_uri($user->getUsername());
         $uri = '/audit/view/'.$this->filter.'/'.$username.'/';
       } else if ($phid) {
         $uri = $request->getRequestURI();
         $uri = $uri->alter('phid', $phid);
       }
 
       return id(new AphrontRedirectResponse())->setURI($uri);
     }
 
     $this->filterStatus = $request->getStr('status', 'all');
 
     $handle = $this->loadHandle();
 
     $nav->appendChild($this->buildListFilters($handle));
 
 
     $title = null;
     $message = null;
 
     if (!$handle) {
       switch ($this->filter) {
         case 'project':
           $title = pht('Choose A Project');
           $message = pht('Choose a project to view audits for.');
           break;
         case 'repository':
           $title = pht('Choose A Repository');
           $message = pht('Choose a repository to view audits for.');
           break;
         case 'package':
         case 'packagecommits':
           $title = pht('Choose a Package');
           $message = pht('Choose a package to view audits for.');
           break;
       }
     }
 
     if (!$message) {
       $nav->appendChild($this->buildViews($handle));
     } else {
       $panel = id(new AphrontErrorView())
         ->setSeverity(AphrontErrorView::SEVERITY_NODATA)
         ->setTitle($title)
         ->appendChild($message);
       $nav->appendChild($panel);
     }
 
     return $this->buildApplicationPage(
       $nav,
       array(
         'title' => pht('Audits'),
         'device' => true,
       ));
   }
 
   private function buildListFilters(PhabricatorObjectHandle $handle = null) {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $form = new AphrontFormView();
     $form->setUser($user);
-    $form->setNoShading(true);
 
     $show_status  = false;
     $show_user    = false;
     $show_project = false;
     $show_package = false;
     $show_repository = false;
 
     switch ($this->filter) {
       case 'audits':
       case 'commits':
         $show_status = true;
         break;
       case 'active':
         $show_user = true;
         break;
       case 'author':
       case 'user':
         $show_user = true;
         $show_status = true;
         break;
       case 'project':
         $show_project = true;
         $show_status = true;
         break;
       case 'repository':
         $show_repository = true;
         $show_status = true;
         break;
       case 'package':
       case 'packagecommits':
         $show_package = true;
         $show_status = true;
         break;
     }
 
     if ($show_user || $show_project || $show_package || $show_repository) {
       if ($show_user) {
         $uri = '/typeahead/common/users/';
         $label = pht('User');
       } else if ($show_project) {
         $uri = '/typeahead/common/projects/';
         $label = pht('Project');
       } else if ($show_package) {
         $uri = '/typeahead/common/packages/';
         $label = pht('Package');
       } else if ($show_repository) {
         $uri = '/typeahead/common/repositories/';
         $label = pht('Repository');
       }
 
       $tok_value = null;
       if ($handle) {
         $tok_value = array(
           $handle->getPHID() => $handle->getFullName(),
         );
       }
 
       $form->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setName('set_phid')
           ->setLabel($label)
           ->setLimit(1)
           ->setDatasource($uri)
           ->setValue($tok_value));
     }
 
     if ($show_status) {
       $form->appendChild(
         id(new AphrontFormToggleButtonsControl())
           ->setName('status')
           ->setLabel(pht('Status'))
           ->setBaseURI($request->getRequestURI(), 'status')
           ->setValue($this->filterStatus)
           ->setButtons(
             array(
               'all'   => pht('All'),
               'open'  => pht('Open'),
               'concern' => pht('Concern Raised'),
             )));
     }
 
     $form->appendChild(
       id(new AphrontFormSubmitControl())
         ->setValue(pht('Filter Audits')));
 
     $view = new AphrontListFilterView();
     $view->appendChild($form);
     return $view;
   }
 
   private function loadHandle() {
     $request = $this->getRequest();
 
     $default = null;
     switch ($this->filter) {
       case 'user':
       case 'active':
       case 'author':
         $default = $request->getUser()->getPHID();
         if ($this->name) {
           $user = id(new PhabricatorUser())->loadOneWhere(
             'username = %s',
             $this->name);
           if ($user) {
             $default = $user->getPHID();
           }
         }
         break;
     }
 
     $phid = $request->getStr('phid', $default);
     if (!$phid) {
       return null;
     }
 
     $phids = array($phid);
     $handles = $this->loadViewerHandles($phids);
     $handle = $handles[$phid];
 
     $this->validateHandle($handle);
     return $handle;
   }
 
   private function validateHandle(PhabricatorObjectHandle $handle) {
     $type = $handle->getType();
 
     switch ($this->filter) {
       case 'active':
       case 'user':
       case 'author':
         if ($type !== PhabricatorPeoplePHIDTypeUser::TYPECONST) {
           throw new Exception("PHID must be a user PHID!");
         }
         break;
       case 'package':
       case 'packagecommits':
         if ($type !== PhabricatorOwnersPHIDTypePackage::TYPECONST) {
           throw new Exception("PHID must be a package PHID!");
         }
         break;
       case 'project':
         if ($type !== PhabricatorProjectPHIDTypeProject::TYPECONST) {
           throw new Exception("PHID must be a project PHID!");
         }
         break;
       case 'repository':
         if ($type !== PhabricatorRepositoryPHIDTypeRepository::TYPECONST) {
           throw new Exception("PHID must be a repository PHID!");
         }
         break;
       case 'audits':
       case 'commits':
         break;
       default:
         throw new Exception("Unknown filter '{$this->filter}'!");
     }
   }
 
   private function buildViews(PhabricatorObjectHandle $handle = null) {
     $views = array();
     switch ($this->filter) {
       case 'active':
         $views[] = $this->buildCommitView($handle);
         $views[] = $this->buildAuditView($handle);
         break;
       case 'audits':
       case 'user':
       case 'package':
       case 'project':
       case 'repository':
         $views[] = $this->buildAuditView($handle);
         break;
       case 'commits':
       case 'packagecommits':
       case 'author':
         $views[] = $this->buildCommitView($handle);
         break;
     }
     return $views;
   }
 
   private function buildAuditView(PhabricatorObjectHandle $handle = null) {
     $request = $this->getRequest();
 
     $query = new PhabricatorAuditQuery();
 
     $use_pager = ($this->filter != 'active');
 
     if ($use_pager) {
       $pager = new AphrontPagerView();
       $pager->setURI($request->getRequestURI(), 'offset');
       $pager->setOffset($request->getInt('offset'));
 
       $query->setOffset($pager->getOffset());
       $query->setLimit($pager->getPageSize() + 1);
     }
 
     $awaiting = null;
 
     $phids = null;
     $repository_phids = null;
     switch ($this->filter) {
       case 'user':
       case 'active':
         $obj = id(new PhabricatorUser())->loadOneWhere(
           'phid = %s',
           $handle->getPHID());
         if (!$obj) {
           throw new Exception("Invalid user!");
         }
         $phids = PhabricatorAuditCommentEditor::loadAuditPHIDsForUser($obj);
         $awaiting = $obj;
         break;
       case 'project':
       case 'package':
         $phids = array($handle->getPHID());
         break;
       case 'repository':
         $repository_phids = array($handle->getPHID());
         break;
       case 'audits';
         break;
       default:
         throw new Exception("Unknown filter!");
     }
 
     if ($phids) {
       $query->withAuditorPHIDs($phids);
     }
 
     if ($repository_phids) {
       $query->withRepositoryPHIDs($repository_phids);
     }
 
     if ($awaiting) {
       $query->withAwaitingUser($awaiting);
     }
 
     switch ($this->filter) {
       case 'active':
         $query->withStatus(PhabricatorAuditQuery::STATUS_OPEN);
         break;
       default:
         switch ($this->filterStatus) {
           case 'open':
             $query->withStatus(PhabricatorAuditQuery::STATUS_OPEN);
             break;
           case 'concern':
             $query->withStatus(PhabricatorAuditQuery::STATUS_CONCERN);
             break;
         }
         break;
     }
 
     if ($handle) {
       $handle_name = $handle->getFullName();
     } else {
       $handle_name = null;
     }
 
     switch ($this->filter) {
       case 'active':
         $header = pht('Required Audits');
         $nodata = pht('No commits require your audit.');
         break;
       case 'user':
         $header = pht("Audits for %s", $handle_name);
         $nodata = pht("No matching audits by %s.", $handle_name);
         break;
       case 'audits':
         $header = pht('Audits');
         $nodata = pht('No matching audits.');
         break;
       case 'project':
         $header = pht("Audits in Project %s", $handle_name);
         $nodata = pht("No matching audits in project %s.", $handle_name);
         break;
       case 'package':
         $header = pht("Audits for Package %s", $handle_name);
         $nodata = pht("No matching audits in package %s.", $handle_name);
         break;
       case 'repository':
         $header = pht("Audits in Repository %s", $handle_name);
         $nodata = pht("No matching audits in repository %s.", $handle_name);
         break;
     }
 
     $query->needCommitData(true);
 
     $audits = $query->execute();
     if ($use_pager) {
       $audits = $pager->sliceResults($audits);
     }
 
     $view = new PhabricatorAuditListView();
     $view->setAudits($audits);
     $view->setCommits($query->getCommits());
     $view->setUser($request->getUser());
     $view->setNoDataString($nodata);
 
     $phids = $view->getRequiredHandlePHIDs();
     $handles = $this->loadViewerHandles($phids);
     $view->setHandles($handles);
 
     $panel = new AphrontPanelView();
     $panel->setHeader($header);
     $panel->appendChild($view);
     $panel->setNoBackground();
 
     if ($use_pager) {
       $panel->appendChild($pager);
     }
 
     return $panel;
   }
 
   private function buildCommitView(PhabricatorObjectHandle $handle = null) {
     $request = $this->getRequest();
 
     $query = new PhabricatorAuditCommitQuery();
     $query->needCommitData(true);
     $query->needAudits(true);
 
     $use_pager = ($this->filter != 'active');
 
     if ($use_pager) {
       $pager = new AphrontPagerView();
       $pager->setURI($request->getRequestURI(), 'offset');
       $pager->setOffset($request->getInt('offset'));
 
       $query->setOffset($pager->getOffset());
       $query->setLimit($pager->getPageSize() + 1);
     }
 
     switch ($this->filter) {
       case 'active':
       case 'author':
         $query->withAuthorPHIDs(array($handle->getPHID()));
         break;
       case 'packagecommits':
         $query->withPackagePHIDs(array($handle->getPHID()));
         break;
     }
 
     switch ($this->filter) {
       case 'active':
         $query->withStatus(PhabricatorAuditCommitQuery::STATUS_CONCERN);
         break;
       default:
         switch ($this->filterStatus) {
           case 'open':
             $query->withStatus(PhabricatorAuditCommitQuery::STATUS_OPEN);
             break;
           case 'concern':
             $query->withStatus(PhabricatorAuditCommitQuery::STATUS_CONCERN);
             break;
         }
         break;
     }
 
     if ($handle) {
       $handle_name = $handle->getName();
     } else {
       $handle_name = null;
     }
 
     switch ($this->filter) {
       case 'active':
         $header = pht('Problem Commits');
         $nodata = pht('None of your commits have open concerns.');
         break;
       case 'author':
         $header = pht("Commits by %s", $handle_name);
         $nodata = pht("No matching commits by %s.", $handle_name);
         break;
       case 'commits':
         $header = pht("Commits");
         $nodata = pht("No matching commits.");
         break;
       case 'packagecommits':
         $header = pht("Commits in Package %s", $handle_name);
         $nodata = pht("No matching commits in package %s.", $handle_name);
         break;
     }
 
     $commits = $query->execute();
 
     if ($use_pager) {
       $commits = $pager->sliceResults($commits);
     }
 
     $view = new PhabricatorAuditCommitListView();
     $view->setUser($request->getUser());
     $view->setCommits($commits);
     $view->setNoDataString($nodata);
 
     $phids = $view->getRequiredHandlePHIDs();
     $handles = $this->loadViewerHandles($phids);
     $view->setHandles($handles);
 
     $panel = new AphrontPanelView();
     $panel->setHeader($header);
     $panel->appendChild($view);
     $panel->setNoBackground();
 
     if ($use_pager) {
       $panel->appendChild($pager);
     }
 
     return $panel;
   }
 
 }
diff --git a/src/applications/auth/controller/PhabricatorAuthConfirmLinkController.php b/src/applications/auth/controller/PhabricatorAuthConfirmLinkController.php
index 9323ab5a9..cedf46bd3 100644
--- a/src/applications/auth/controller/PhabricatorAuthConfirmLinkController.php
+++ b/src/applications/auth/controller/PhabricatorAuthConfirmLinkController.php
@@ -1,93 +1,93 @@
 <?php
 
 final class PhabricatorAuthConfirmLinkController
   extends PhabricatorAuthController {
 
   private $accountKey;
 
   public function willProcessRequest(array $data) {
     $this->accountKey = idx($data, 'akey');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $viewer = $request->getUser();
 
     $result = $this->loadAccountForRegistrationOrLinking($this->accountKey);
     list($account, $provider, $response) = $result;
 
     if ($response) {
       return $response;
     }
 
     if (!$provider->shouldAllowAccountLink()) {
       return $this->renderError(pht('This account is not linkable.'));
     }
 
     $panel_uri = '/settings/panel/external/';
 
     if ($request->isFormPost()) {
       $account->setUserPHID($viewer->getPHID());
       $account->save();
 
       $this->clearRegistrationCookies();
 
       // TODO: Send the user email about the new account link.
 
       return id(new AphrontRedirectResponse())->setURI($panel_uri);
     }
 
     // TODO: Provide more information about the external account. Clicking
     // through this form blindly is dangerous.
 
     // TODO: If the user has password authentication, require them to retype
     // their password here.
 
     $dialog = id(new AphrontDialogView())
       ->setUser($viewer)
       ->setTitle(pht('Confirm %s Account Link', $provider->getProviderName()))
       ->addCancelButton($panel_uri)
       ->addSubmitButton(pht('Confirm Account Link'));
 
-    $form = id(new AphrontFormLayoutView())
+    $form = id(new PHUIFormLayoutView())
       ->setFullWidth(true)
       ->appendChild(
         phutil_tag(
           'div',
           array(
             'class' => 'aphront-form-instructions',
           ),
           pht(
             "Confirm the link with this %s account. This account will be ".
             "able to log in to your Phabricator account.",
             $provider->getProviderName())))
       ->appendChild(
         id(new PhabricatorAuthAccountView())
           ->setUser($viewer)
           ->setExternalAccount($account)
           ->setAuthProvider($provider));
 
     $dialog->appendChild($form);
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName(pht('Confirm Link'))
         ->setHref($panel_uri));
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($provider->getProviderName()));
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
         $dialog,
       ),
       array(
         'title' => pht('Confirm External Account Link'),
         'device' => true,
       ));
   }
 
 
 }
diff --git a/src/applications/auth/controller/PhabricatorEmailLoginController.php b/src/applications/auth/controller/PhabricatorEmailLoginController.php
index 8ebc2a001..71ba31657 100644
--- a/src/applications/auth/controller/PhabricatorEmailLoginController.php
+++ b/src/applications/auth/controller/PhabricatorEmailLoginController.php
@@ -1,159 +1,159 @@
 <?php
 
 final class PhabricatorEmailLoginController
   extends PhabricatorAuthController {
 
   public function shouldRequireLogin() {
     return false;
   }
 
   public function processRequest() {
     $request = $this->getRequest();
 
     if (!PhabricatorAuthProviderPassword::getPasswordProvider()) {
       return new Aphront400Response();
     }
 
     $e_email = true;
     $e_captcha = true;
     $errors = array();
 
     $is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business');
 
     if ($request->isFormPost()) {
       $e_email = null;
       $e_captcha = pht('Again');
 
       $captcha_ok = AphrontFormRecaptchaControl::processCaptcha($request);
       if (!$captcha_ok) {
         $errors[] = pht("Captcha response is incorrect, try again.");
         $e_captcha = pht('Invalid');
       }
 
       $email = $request->getStr('email');
       if (!strlen($email)) {
        $errors[] = pht("You must provide an email address.");
        $e_email = pht('Required');
       }
 
       if (!$errors) {
         // NOTE: Don't validate the email unless the captcha is good; this makes
         // it expensive to fish for valid email addresses while giving the user
         // a better error if they goof their email.
 
         $target_email = id(new PhabricatorUserEmail())->loadOneWhere(
           'address = %s',
           $email);
 
         $target_user = null;
         if ($target_email) {
           $target_user = id(new PhabricatorUser())->loadOneWhere(
             'phid = %s',
             $target_email->getUserPHID());
         }
 
         if (!$target_user) {
           $errors[] =
             pht("There is no account associated with that email address.");
           $e_email = pht("Invalid");
         }
 
         if (!$errors) {
           $uri = $target_user->getEmailLoginURI($target_email);
           if ($is_serious) {
             $body = <<<EOBODY
 You can use this link to reset your Phabricator password:
 
   {$uri}
 
 EOBODY;
           } else {
             $body = <<<EOBODY
 Condolences on forgetting your password. You can use this link to reset it:
 
   {$uri}
 
 After you set a new password, consider writing it down on a sticky note and
 attaching it to your monitor so you don't forget again! Choosing a very short,
 easy-to-remember password like "cat" or "1234" might also help.
 
 Best Wishes,
 Phabricator
 
 EOBODY;
           }
 
           // NOTE: Don't set the user as 'from', or they may not receive the
           // mail if they have the "don't send me email about my own actions"
           // preference set.
 
           $mail = new PhabricatorMetaMTAMail();
           $mail->setSubject('[Phabricator] Password Reset');
           $mail->addTos(
             array(
               $target_user->getPHID(),
             ));
           $mail->setBody($body);
           $mail->saveAndSend();
 
           $view = new AphrontRequestFailureView();
           $view->setHeader(pht('Check Your Email'));
           $view->appendChild(phutil_tag('p', array(), pht(
               'An email has been sent with a link you can use to login.')));
           return $this->buildStandardPageResponse(
             $view,
             array(
               'title' => pht('Email Sent'),
             ));
         }
       }
 
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setErrors($errors);
     }
 
-    $email_auth = new AphrontFormLayoutView();
+    $email_auth = new PHUIFormLayoutView();
     $email_auth->appendChild($error_view);
     $email_auth
       ->setUser($request->getUser())
       ->setFullWidth(true)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Email'))
           ->setName('email')
           ->setValue($request->getStr('email'))
           ->setError($e_email))
       ->appendChild(
         id(new AphrontFormRecaptchaControl())
           ->setLabel(pht('Captcha'))
           ->setError($e_captcha));
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName(pht('Reset Password')));
 
     $dialog = new AphrontDialogView();
     $dialog->setUser($request->getUser());
     $dialog->setTitle(pht(
       'Forgot Password / Email Login'));
     $dialog->appendChild($email_auth);
     $dialog->addSubmitButton(pht('Send Email'));
     $dialog->setSubmitURI('/login/email/');
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
         $dialog,
       ),
       array(
         'title' => pht('Forgot Password'),
         'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/auth/controller/PhabricatorEmailVerificationController.php b/src/applications/auth/controller/PhabricatorEmailVerificationController.php
index 37eb76ee0..1836e1015 100644
--- a/src/applications/auth/controller/PhabricatorEmailVerificationController.php
+++ b/src/applications/auth/controller/PhabricatorEmailVerificationController.php
@@ -1,80 +1,76 @@
 <?php
 
 final class PhabricatorEmailVerificationController
   extends PhabricatorAuthController {
 
   private $code;
 
   public function willProcessRequest(array $data) {
     $this->code = $data['code'];
   }
 
   public function shouldRequireEmailVerification() {
     // Since users need to be able to hit this endpoint in order to verify
     // email, we can't ever require email verification here.
     return false;
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $email = id(new PhabricatorUserEmail())->loadOneWhere(
       'userPHID = %s AND verificationCode = %s',
       $user->getPHID(),
       $this->code);
 
-    $color = PhabricatorActionHeaderView::HEADER_DARK_GREY;
-
     if (!$email) {
       $title = pht('Unable to Verify Email');
       $content = pht(
         'The verification code you provided is incorrect, or the email '.
         'address has been removed, or the email address is owned by another '.
         'user. Make sure you followed the link in the email correctly and are '.
         'logged in with the user account associated with the email address.');
-      $color = PhabricatorActionHeaderView::HEADER_RED;
       $continue = pht('Rats!');
     } else if ($email->getIsVerified()) {
       $title = pht('Address Already Verified');
       $content = pht(
         'This email address has already been verified.');
       $continue = pht('Continue to Phabricator');
     } else {
       $guard = AphrontWriteGuard::beginScopedUnguardedWrites();
         $email->setIsVerified(1);
         $email->save();
       unset($guard);
 
       $title = pht('Address Verified');
       $content = pht(
         'The email address %s is now verified.',
         phutil_tag('strong', array(), $email->getAddress()));
       $continue = pht('Continue to Phabricator');
     }
 
     $dialog = id(new AphrontDialogView())
       ->setUser($user)
       ->setTitle($title)
-      ->setHeaderColor($color)
       ->setMethod('GET')
       ->addCancelButton('/', $continue)
       ->appendChild($content);
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName(pht('Verify Email')));
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
         $dialog,
       ),
       array(
         'title' => pht('Verify Email'),
         'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/auth/controller/config/PhabricatorAuthEditController.php b/src/applications/auth/controller/config/PhabricatorAuthEditController.php
index 7ada83056..e96e16d3f 100644
--- a/src/applications/auth/controller/config/PhabricatorAuthEditController.php
+++ b/src/applications/auth/controller/config/PhabricatorAuthEditController.php
@@ -1,286 +1,289 @@
 <?php
 
 final class PhabricatorAuthEditController
   extends PhabricatorAuthProviderConfigController {
 
   private $providerClass;
   private $configID;
 
   public function willProcessRequest(array $data) {
     $this->providerClass = idx($data, 'className');
     $this->configID = idx($data, 'id');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $viewer = $request->getUser();
 
     if ($this->configID) {
       $config = id(new PhabricatorAuthProviderConfigQuery())
         ->setViewer($viewer)
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_VIEW,
             PhabricatorPolicyCapability::CAN_EDIT,
           ))
         ->withIDs(array($this->configID))
         ->executeOne();
       if (!$config) {
         return new Aphront404Response();
       }
 
       $provider = $config->getProvider();
       if (!$provider) {
         return new Aphront404Response();
       }
 
       $is_new = false;
     } else {
       $providers = PhabricatorAuthProvider::getAllBaseProviders();
       foreach ($providers as $candidate_provider) {
         if (get_class($candidate_provider) === $this->providerClass) {
           $provider = $candidate_provider;
           break;
         }
       }
 
       if (!$provider) {
         return new Aphront404Response();
       }
 
       // TODO: When we have multi-auth providers, support them here.
 
       $configs = id(new PhabricatorAuthProviderConfigQuery())
         ->setViewer($viewer)
         ->withProviderClasses(array(get_class($provider)))
         ->execute();
 
       if ($configs) {
         $id = head($configs)->getID();
         $dialog = id(new AphrontDialogView())
           ->setUser($viewer)
           ->setMethod('GET')
           ->setSubmitURI($this->getApplicationURI('config/edit/'.$id.'/'))
           ->setTitle(pht('Provider Already Configured'))
           ->appendChild(
             pht(
               'This provider ("%s") already exists, and you can not add more '.
               'than one instance of it. You can edit the existing provider, '.
               'or you can choose a different provider.',
               $provider->getProviderName()))
           ->addCancelButton($this->getApplicationURI('config/new/'))
           ->addSubmitButton(pht('Edit Existing Provider'));
 
         return id(new AphrontDialogResponse())->setDialog($dialog);
       }
 
       $config = $provider->getDefaultProviderConfig();
       $provider->attachProviderConfig($config);
 
       $is_new = true;
     }
 
     $errors = array();
 
     $v_registration = $config->getShouldAllowRegistration();
     $v_link = $config->getShouldAllowLink();
     $v_unlink = $config->getShouldAllowUnlink();
 
     if ($request->isFormPost()) {
 
       $properties = $provider->readFormValuesFromRequest($request);
       list($errors, $issues, $properties) = $provider->processEditForm(
         $request,
         $properties);
 
       $xactions = array();
 
       if (!$errors) {
         if ($is_new) {
           $config->setProviderType($provider->getProviderType());
           $config->setProviderDomain($provider->getProviderDomain());
         }
 
         $xactions[] = id(new PhabricatorAuthProviderConfigTransaction())
           ->setTransactionType(
             PhabricatorAuthProviderConfigTransaction::TYPE_REGISTRATION)
           ->setNewValue($request->getInt('allowRegistration', 0));
 
         $xactions[] = id(new PhabricatorAuthProviderConfigTransaction())
           ->setTransactionType(
             PhabricatorAuthProviderConfigTransaction::TYPE_LINK)
           ->setNewValue($request->getInt('allowLink', 0));
 
         $xactions[] = id(new PhabricatorAuthProviderConfigTransaction())
           ->setTransactionType(
             PhabricatorAuthProviderConfigTransaction::TYPE_UNLINK)
           ->setNewValue($request->getInt('allowUnlink', 0));
 
         foreach ($properties as $key => $value) {
           $xactions[] = id(new PhabricatorAuthProviderConfigTransaction())
             ->setTransactionType(
               PhabricatorAuthProviderConfigTransaction::TYPE_PROPERTY)
             ->setMetadataValue('auth:property', $key)
             ->setNewValue($value);
         }
 
         if ($is_new) {
           $config->save();
         }
 
         $editor = id(new PhabricatorAuthProviderConfigEditor())
           ->setActor($viewer)
           ->setContentSourceFromRequest($request)
           ->setContinueOnNoEffect(true)
           ->applyTransactions($config, $xactions);
 
         return id(new AphrontRedirectResponse())->setURI(
           $this->getApplicationURI());
       }
     } else {
       $properties = $provider->readFormValuesFromProvider();
       $issues = array();
     }
 
     if ($errors) {
       $errors = id(new AphrontErrorView())->setErrors($errors);
     }
 
     if ($is_new) {
       $button = pht('Add Provider');
       $crumb = pht('Add Provider');
       $title = pht('Add Authentication Provider');
       $cancel_uri = $this->getApplicationURI('/config/new/');
     } else {
       $button = pht('Save');
       $crumb = pht('Edit Provider');
       $title = pht('Edit Authentication Provider');
       $cancel_uri = $this->getApplicationURI();
     }
 
     $str_registration = hsprintf(
       '<strong>%s:</strong> %s',
       pht('Allow Registration'),
       pht(
         'Allow users to register new Phabricator accounts using this '.
         'provider. If you disable registration, users can still use this '.
         'provider to log in to existing accounts, but will not be able to '.
         'create new accounts.'));
 
     $str_link = hsprintf(
       '<strong>%s:</strong> %s',
       pht('Allow Linking Accounts'),
       pht(
         'Allow users to link account credentials for this provider to '.
         'existing Phabricator accounts. There is normally no reason to '.
         'disable this unless you are trying to move away from a provider '.
         'and want to stop users from creating new account links.'));
 
     $str_unlink = hsprintf(
       '<strong>%s:</strong> %s',
       pht('Allow Unlinking Accounts'),
       pht(
         'Allow users to unlink account credentials for this provider from '.
         'existing Phabricator accounts. If you disable this, Phabricator '.
         'accounts will be permanently bound to provider accounts.'));
 
     $status_tag = id(new PhabricatorTagView())
       ->setType(PhabricatorTagView::TYPE_STATE);
     if ($is_new) {
       $status_tag
         ->setName(pht('New Provider'))
         ->setBackgroundColor('blue');
     } else if ($config->getIsEnabled()) {
       $status_tag
         ->setName(pht('Enabled'))
         ->setBackgroundColor('green');
     } else {
       $status_tag
         ->setName(pht('Disabled'))
         ->setBackgroundColor('red');
     }
 
     $form = id(new AphrontFormView())
       ->setUser($viewer)
-      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel(pht('Provider'))
           ->setValue($provider->getProviderName()))
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel(pht('Status'))
           ->setValue($status_tag))
       ->appendChild(
         id(new AphrontFormCheckboxControl())
           ->setLabel(pht('Allow'))
           ->addCheckbox(
             'allowRegistration',
             1,
             $str_registration,
             $v_registration))
       ->appendChild(
         id(new AphrontFormCheckboxControl())
           ->addCheckbox(
             'allowLink',
             1,
             $str_link,
             $v_link))
       ->appendChild(
         id(new AphrontFormCheckboxControl())
           ->addCheckbox(
             'allowUnlink',
             1,
             $str_unlink,
             $v_unlink));
 
     $provider->extendEditForm($request, $form, $properties, $issues);
 
     $form
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton($cancel_uri)
           ->setValue($button));
 
     $help = $provider->getConfigurationHelp();
     if ($help) {
       $form->appendChild(id(new PHUIFormDividerControl()));
       $form->appendRemarkupInstructions($help);
     }
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($crumb));
 
     $xaction_view = null;
     if (!$is_new) {
       $xactions = id(new PhabricatorAuthProviderConfigTransactionQuery())
         ->withObjectPHIDs(array($config->getPHID()))
         ->setViewer($viewer)
         ->execute();
 
       foreach ($xactions as $xaction) {
         $xaction->setProvider($provider);
       }
 
       $xaction_view = id(new PhabricatorApplicationTransactionView())
         ->setUser($viewer)
         ->setObjectPHID($config->getPHID())
         ->setTransactions($xactions);
     }
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($title)
+      ->setFormError($errors)
+      ->setForm($form);
+
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $errors,
-        $form,
+        $form_box,
         $xaction_view,
       ),
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/auth/controller/config/PhabricatorAuthNewController.php b/src/applications/auth/controller/config/PhabricatorAuthNewController.php
index 1c37f454c..d285e7652 100644
--- a/src/applications/auth/controller/config/PhabricatorAuthNewController.php
+++ b/src/applications/auth/controller/config/PhabricatorAuthNewController.php
@@ -1,102 +1,105 @@
 <?php
 
 final class PhabricatorAuthNewController
   extends PhabricatorAuthProviderConfigController {
 
   public function processRequest() {
     $request = $this->getRequest();
     $viewer = $request->getUser();
 
     $providers = PhabricatorAuthProvider::getAllBaseProviders();
 
     $e_provider = null;
     $errors = array();
 
     if ($request->isFormPost()) {
       $provider_string = $request->getStr('provider');
       if (!strlen($provider_string)) {
         $e_provider = pht('Required');
         $errors[] = pht('You must select an authentication provider.');
       } else {
         $found = false;
         foreach ($providers as $provider) {
           if (get_class($provider) === $provider_string) {
             $found = true;
             break;
           }
         }
         if (!$found) {
           $e_provider = pht('Invalid');
           $errors[] = pht('You must select a valid provider.');
         }
       }
 
       if (!$errors) {
         return id(new AphrontRedirectResponse())->setURI(
           $this->getApplicationURI('/config/new/'.$provider_string.'/'));
       }
     }
 
     if ($errors) {
       $errors = id(new AphrontErrorView())->setErrors($errors);
     }
 
     $options = id(new AphrontFormRadioButtonControl())
       ->setLabel(pht('Provider'))
       ->setName('provider')
       ->setError($e_provider);
 
     $configured = PhabricatorAuthProvider::getAllProviders();
     $configured_classes = array();
     foreach ($configured as $configured_provider) {
       $configured_classes[get_class($configured_provider)] = true;
     }
 
     // Sort providers by login order, and move disabled providers to the
     // bottom.
     $providers = msort($providers, 'getLoginOrder');
     $providers = array_diff_key($providers, $configured_classes) + $providers;
 
     foreach ($providers as $provider) {
       if (isset($configured_classes[get_class($provider)])) {
         $disabled = true;
         $description = pht('This provider is already configured.');
       } else {
         $disabled = false;
         $description = $provider->getDescriptionForCreate();
       }
       $options->addButton(
         get_class($provider),
         $provider->getNameForCreate(),
         $description,
         $disabled ? 'disabled' : null,
         $disabled);
     }
 
     $form = id(new AphrontFormView())
       ->setUser($viewer)
       ->appendChild($options)
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton($this->getApplicationURI())
           ->setValue(pht('Continue')));
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Add Authentication Provider'))
+      ->setFormError($errors)
+      ->setForm($form);
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName(pht('Add Provider')));
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $errors,
-        $form,
+        $form_box,
       ),
       array(
         'title' => pht('Add Authentication Provider'),
         'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/auth/provider/PhabricatorAuthProviderLDAP.php b/src/applications/auth/provider/PhabricatorAuthProviderLDAP.php
index deefb54bc..6b68b4249 100644
--- a/src/applications/auth/provider/PhabricatorAuthProviderLDAP.php
+++ b/src/applications/auth/provider/PhabricatorAuthProviderLDAP.php
@@ -1,393 +1,393 @@
 <?php
 
 final class PhabricatorAuthProviderLDAP
   extends PhabricatorAuthProvider {
 
   private $adapter;
 
   public function getProviderName() {
     return pht('LDAP');
   }
 
   public function getDescriptionForCreate() {
     return pht(
       'Configure a connection to an LDAP server so that users can use their '.
       'LDAP credentials to log in to Phabricator.');
   }
 
   public function getDefaultProviderConfig() {
     return parent::getDefaultProviderConfig()
       ->setProperty(self::KEY_PORT, 389)
       ->setProperty(self::KEY_VERSION, 3);
   }
 
   public function getAdapter() {
     if (!$this->adapter) {
       $conf = $this->getProviderConfig();
 
       $realname_attributes = $conf->getProperty(self::KEY_REALNAME_ATTRIBUTES);
       if (!is_array($realname_attributes)) {
         $realname_attributes = array();
       }
 
       $adapter = id(new PhutilAuthAdapterLDAP())
         ->setHostname(
           $conf->getProperty(self::KEY_HOSTNAME))
         ->setPort(
           $conf->getProperty(self::KEY_PORT))
         ->setBaseDistinguishedName(
           $conf->getProperty(self::KEY_DISTINGUISHED_NAME))
         ->setSearchAttribute(
           $conf->getProperty(self::KEY_SEARCH_ATTRIBUTE))
         ->setUsernameAttribute(
           $conf->getProperty(self::KEY_USERNAME_ATTRIBUTE))
         ->setRealNameAttributes($realname_attributes)
         ->setLDAPVersion(
           $conf->getProperty(self::KEY_VERSION))
         ->setLDAPReferrals(
           $conf->getProperty(self::KEY_REFERRALS))
         ->setLDAPStartTLS(
           $conf->getProperty(self::KEY_START_TLS))
         ->setAnonymousUsername(
           $conf->getProperty(self::KEY_ANONYMOUS_USERNAME))
         ->setAnonymousPassword(
           new PhutilOpaqueEnvelope(
             $conf->getProperty(self::KEY_ANONYMOUS_PASSWORD)))
         ->setSearchFirst(
           $conf->getProperty(self::KEY_SEARCH_FIRST))
         ->setActiveDirectoryDomain(
           $conf->getProperty(self::KEY_ACTIVEDIRECTORY_DOMAIN));
       $this->adapter = $adapter;
     }
     return $this->adapter;
   }
 
   protected function renderLoginForm(AphrontRequest $request, $mode) {
     $viewer = $request->getUser();
 
     $dialog = id(new AphrontDialogView())
       ->setSubmitURI($this->getLoginURI())
       ->setUser($viewer);
 
     if ($mode == 'link') {
       $dialog->setTitle(pht('Link LDAP Account'));
       $dialog->addSubmitButton(pht('Link Accounts'));
       $dialog->addCancelButton($this->getSettingsURI());
     } else if ($mode == 'refresh') {
       $dialog->setTitle(pht('Refresh LDAP Account'));
       $dialog->addSubmitButton(pht('Refresh Account'));
       $dialog->addCancelButton($this->getSettingsURI());
     } else {
       if ($this->shouldAllowRegistration()) {
         $dialog->setTitle(pht('Login or Register with LDAP'));
         $dialog->addSubmitButton(pht('Login or Register'));
       } else {
         $dialog->setTitle(pht('Login with LDAP'));
         $dialog->addSubmitButton(pht('Login'));
       }
       if ($mode == 'login') {
         $dialog->addCancelButton($this->getStartURI());
       }
     }
 
     $v_user = $request->getStr('ldap_username');
 
     $e_user = null;
     $e_pass = null;
 
     $errors = array();
     if ($request->isHTTPPost()) {
       // NOTE: This is intentionally vague so as not to disclose whether a
       // given username exists.
       $e_user = pht('Invalid');
       $e_pass = pht('Invalid');
       $errors[] = pht('Username or password are incorrect.');
     }
 
-    $form = id(new AphrontFormLayoutView())
+    $form = id(new PHUIFormLayoutView())
       ->setUser($viewer)
       ->setFullWidth(true)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel('LDAP Username')
           ->setName('ldap_username')
           ->setValue($v_user)
           ->setError($e_user))
       ->appendChild(
         id(new AphrontFormPasswordControl())
           ->setLabel('LDAP Password')
           ->setName('ldap_password')
           ->setError($e_pass));
 
     if ($errors) {
       $errors = id(new AphrontErrorView())->setErrors($errors);
     }
 
     $dialog->appendChild($errors);
     $dialog->appendChild($form);
 
 
     return $dialog;
   }
 
   public function processLoginRequest(
     PhabricatorAuthLoginController $controller) {
 
     $request = $controller->getRequest();
     $viewer = $request->getUser();
     $response = null;
     $account = null;
 
     $username = $request->getStr('ldap_username');
     $password = $request->getStr('ldap_password');
     $has_password = strlen($password);
     $password = new PhutilOpaqueEnvelope($password);
 
     if (!strlen($username) || !$has_password) {
       $response = $controller->buildProviderPageResponse(
         $this,
         $this->renderLoginForm($request, 'login'));
       return array($account, $response);
     }
 
     try {
       if (strlen($username) && $has_password) {
         $adapter = $this->getAdapter();
         $adapter->setLoginUsername($username);
         $adapter->setLoginPassword($password);
 
         // TODO: This calls ldap_bind() eventually, which dumps cleartext
         // passwords to the error log. See note in PhutilAuthAdapterLDAP.
         // See T3351.
 
         DarkConsoleErrorLogPluginAPI::enableDiscardMode();
           $account_id = $adapter->getAccountID();
         DarkConsoleErrorLogPluginAPI::disableDiscardMode();
       } else {
         throw new Exception("Username and password are required!");
       }
     } catch (Exception $ex) {
       // TODO: Make this cleaner.
       throw $ex;
     }
 
     return array($this->loadOrCreateAccount($account_id), $response);
   }
 
 
   const KEY_HOSTNAME                = 'ldap:host';
   const KEY_PORT                    = 'ldap:port';
   const KEY_DISTINGUISHED_NAME      = 'ldap:dn';
   const KEY_SEARCH_ATTRIBUTE        = 'ldap:search-attribute';
   const KEY_USERNAME_ATTRIBUTE      = 'ldap:username-attribute';
   const KEY_REALNAME_ATTRIBUTES     = 'ldap:realname-attributes';
   const KEY_VERSION                 = 'ldap:version';
   const KEY_REFERRALS               = 'ldap:referrals';
   const KEY_START_TLS               = 'ldap:start-tls';
   const KEY_ANONYMOUS_USERNAME      = 'ldap:anoynmous-username';
   const KEY_ANONYMOUS_PASSWORD      = 'ldap:anonymous-password';
   const KEY_SEARCH_FIRST            = 'ldap:search-first';
   const KEY_ACTIVEDIRECTORY_DOMAIN  = 'ldap:activedirectory-domain';
 
   private function getPropertyKeys() {
     return array_keys($this->getPropertyLabels());
   }
 
   private function getPropertyLabels() {
     return array(
       self::KEY_HOSTNAME => pht('LDAP Hostname'),
       self::KEY_PORT => pht('LDAP Port'),
       self::KEY_DISTINGUISHED_NAME => pht('Base Distinguished Name'),
       self::KEY_SEARCH_ATTRIBUTE => pht('Search Attribute'),
       self::KEY_USERNAME_ATTRIBUTE => pht('Username Attribute'),
       self::KEY_REALNAME_ATTRIBUTES => pht('Realname Attributes'),
       self::KEY_VERSION => pht('LDAP Version'),
       self::KEY_REFERRALS => pht('Enable Referrals'),
       self::KEY_START_TLS => pht('Use TLS'),
       self::KEY_SEARCH_FIRST => pht('Search First'),
       self::KEY_ANONYMOUS_USERNAME => pht('Anonymous Username'),
       self::KEY_ANONYMOUS_PASSWORD => pht('Anonymous Password'),
       self::KEY_ACTIVEDIRECTORY_DOMAIN => pht('ActiveDirectory Domain'),
     );
   }
 
   public function readFormValuesFromProvider() {
     $properties = array();
     foreach ($this->getPropertyLabels() as $key => $ignored) {
       $properties[$key] = $this->getProviderConfig()->getProperty($key);
     }
     return $properties;
   }
 
   public function readFormValuesFromRequest(AphrontRequest $request) {
     $values = array();
     foreach ($this->getPropertyKeys() as $key) {
       switch ($key) {
         case self::KEY_REALNAME_ATTRIBUTES:
           $values[$key] = $request->getStrList($key, array());
           break;
         default:
           $values[$key] = $request->getStr($key);
           break;
       }
     }
 
     return $values;
   }
 
   public function processEditForm(
     AphrontRequest $request,
     array $values) {
     $errors = array();
     $issues = array();
     return array($errors, $issues, $values);
   }
 
   public function extendEditForm(
     AphrontRequest $request,
     AphrontFormView $form,
     array $values,
     array $issues) {
 
     $labels = $this->getPropertyLabels();
 
     $captions = array(
       self::KEY_HOSTNAME =>
         pht('Example: %s',
           hsprintf('<tt>%s</tt>', pht('ldap.example.com'))),
       self::KEY_DISTINGUISHED_NAME =>
         pht('Example: %s',
           hsprintf('<tt>%s</tt>', pht('ou=People, dc=example, dc=com'))),
       self::KEY_SEARCH_ATTRIBUTE =>
         pht('Example: %s',
           hsprintf('<tt>%s</tt>', pht('sn'))),
       self::KEY_USERNAME_ATTRIBUTE =>
         pht('Optional, if different from search attribute.'),
       self::KEY_REALNAME_ATTRIBUTES =>
         pht('Optional. Example: %s',
           hsprintf('<tt>%s</tt>', pht('firstname, lastname'))),
       self::KEY_REFERRALS =>
         pht('Follow referrals. Disable this for Windows AD 2003.'),
       self::KEY_START_TLS =>
         pht('Start TLS after binding to the LDAP server.'),
       self::KEY_SEARCH_FIRST =>
         pht(
           'When the user enters their username, search for a matching '.
           'record using the "Search Attribute", then try to bind using '.
           'the DN for the record. This is useful if usernames are not '.
           'part of the record DN.'),
       self::KEY_ANONYMOUS_USERNAME =>
         pht('Username to bind with before searching.'),
       self::KEY_ANONYMOUS_PASSWORD =>
         pht('Password to bind with before searching.'),
     );
 
     $types = array(
       self::KEY_REFERRALS           => 'checkbox',
       self::KEY_START_TLS           => 'checkbox',
       self::KEY_SEARCH_FIRST        => 'checkbox',
       self::KEY_REALNAME_ATTRIBUTES => 'list',
       self::KEY_ANONYMOUS_PASSWORD  => 'password',
     );
 
     foreach ($labels as $key => $label) {
       $caption = idx($captions, $key);
       $type = idx($types, $key);
       $value = idx($values, $key);
 
       $control = null;
       switch ($type) {
         case 'checkbox':
           $control = id(new AphrontFormCheckboxControl())
             ->addCheckbox(
               $key,
               1,
               hsprintf('<strong>%s:</strong> %s', $label, $caption),
               $value);
           break;
         case 'list':
           $control = id(new AphrontFormTextControl())
             ->setName($key)
             ->setLabel($label)
             ->setCaption($caption)
             ->setValue($value ? implode(', ', $value) : null);
           break;
         case 'password':
           $control = id(new AphrontFormPasswordControl())
             ->setName($key)
             ->setLabel($label)
             ->setCaption($caption)
             ->setValue($value);
           break;
         default:
           $control = id(new AphrontFormTextControl())
             ->setName($key)
             ->setLabel($label)
             ->setCaption($caption)
             ->setValue($value);
           break;
       }
 
       $form->appendChild($control);
     }
   }
 
   public function renderConfigPropertyTransactionTitle(
     PhabricatorAuthProviderConfigTransaction $xaction) {
 
     $author_phid = $xaction->getAuthorPHID();
     $old = $xaction->getOldValue();
     $new = $xaction->getNewValue();
     $key = $xaction->getMetadataValue(
       PhabricatorAuthProviderConfigTransaction::PROPERTY_KEY);
 
     $labels = $this->getPropertyLabels();
     if (isset($labels[$key])) {
       $label = $labels[$key];
 
       $mask = false;
       switch ($key) {
         case self::KEY_ANONYMOUS_PASSWORD:
           $mask = true;
           break;
       }
 
       if ($mask) {
         return pht(
           '%s updated the "%s" value.',
           $xaction->renderHandleLink($author_phid),
           $label);
       }
 
       if (!strlen($old)) {
         return pht(
           '%s set the "%s" value to "%s".',
           $xaction->renderHandleLink($author_phid),
           $label,
           $new);
       } else {
         return pht(
           '%s changed the "%s" value from "%s" to "%s".',
           $xaction->renderHandleLink($author_phid),
           $label,
           $old,
           $new);
       }
     }
 
     return parent::renderConfigPropertyTransactionTitle($xaction);
   }
 
   public static function getLDAPProvider() {
     $providers = self::getAllEnabledProviders();
 
     foreach ($providers as $provider) {
       if ($provider instanceof PhabricatorAuthProviderLDAP) {
         return $provider;
       }
     }
 
     return null;
   }
 
 }
diff --git a/src/applications/auth/provider/PhabricatorAuthProviderPassword.php b/src/applications/auth/provider/PhabricatorAuthProviderPassword.php
index c56f8ea26..dddcbc18c 100644
--- a/src/applications/auth/provider/PhabricatorAuthProviderPassword.php
+++ b/src/applications/auth/provider/PhabricatorAuthProviderPassword.php
@@ -1,253 +1,253 @@
 <?php
 
 final class PhabricatorAuthProviderPassword
   extends PhabricatorAuthProvider {
 
   private $adapter;
 
   public function getProviderName() {
     return pht('Username/Password');
   }
 
   public function getConfigurationHelp() {
     return pht(
       'You can select a minimum password length by setting '.
       '`account.minimum-password-length` in configuration.');
   }
 
   public function getDescriptionForCreate() {
     return pht(
       'Allow users to login or register using a username and password.');
   }
 
   public function getAdapter() {
     if (!$this->adapter) {
       $adapter = new PhutilAuthAdapterEmpty();
       $adapter->setAdapterType('password');
       $adapter->setAdapterDomain('self');
       $this->adapter = $adapter;
     }
     return $this->adapter;
   }
 
   public function getLoginOrder() {
     // Make sure username/password appears first if it is enabled.
     return '100-'.$this->getProviderName();
   }
 
   public function shouldAllowAccountLink() {
     return false;
   }
 
   public function shouldAllowAccountUnlink() {
     return false;
   }
 
   public function isDefaultRegistrationProvider() {
     return true;
   }
 
   public function buildLoginForm(
     PhabricatorAuthStartController $controller) {
     $request = $controller->getRequest();
     return $this->renderPasswordLoginForm($request);
   }
 
   public function buildLinkForm(
     PhabricatorAuthLinkController $controller) {
     throw new Exception("Password providers can't be linked.");
   }
 
   private function renderPasswordLoginForm(
     AphrontRequest $request,
     $require_captcha = false,
     $captcha_valid = false) {
 
     $viewer = $request->getUser();
 
     $dialog = id(new AphrontDialogView())
       ->setSubmitURI($this->getLoginURI())
       ->setUser($viewer)
       ->setTitle(pht('Login to Phabricator'))
       ->addSubmitButton(pht('Login'));
 
     if ($this->shouldAllowRegistration()) {
       $dialog->addCancelButton(
         '/auth/register/',
         pht('Register New Account'));
     }
 
     $dialog->addFooter(
       phutil_tag(
         'a',
         array(
           'href' => '/login/email/',
         ),
         pht('Forgot your password?')));
 
     $v_user = nonempty(
       $request->getStr('username'),
       $request->getCookie('phusr'));
 
     $e_user = null;
     $e_pass = null;
     $e_captcha = null;
 
     $errors = array();
     if ($require_captcha && !$captcha_valid) {
       if (AphrontFormRecaptchaControl::hasCaptchaResponse($request)) {
         $e_captcha = pht('Invalid');
         $errors[] = pht('CAPTCHA was not entered correctly.');
       } else {
         $e_captcha = pht('Required');
         $errors[] = pht('Too many login failures recently. You must '.
                     'submit a CAPTCHA with your login request.');
       }
     } else if ($request->isHTTPPost()) {
       // NOTE: This is intentionally vague so as not to disclose whether a
       // given username or email is registered.
       $e_user = pht('Invalid');
       $e_pass = pht('Invalid');
       $errors[] = pht('Username or password are incorrect.');
     }
 
     if ($errors) {
       $errors = id(new AphrontErrorView())->setErrors($errors);
     }
 
-    $form = id(new AphrontFormLayoutView())
+    $form = id(new PHUIFormLayoutView())
       ->setFullWidth(true)
       ->appendChild($errors)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel('Username or Email')
           ->setName('username')
           ->setValue($v_user)
           ->setError($e_user))
       ->appendChild(
         id(new AphrontFormPasswordControl())
           ->setLabel('Password')
           ->setName('password')
           ->setError($e_pass));
 
     if ($require_captcha) {
         $form->appendChild(
           id(new AphrontFormRecaptchaControl())
             ->setError($e_captcha));
     }
 
     $dialog->appendChild($form);
 
     return $dialog;
   }
 
   public function processLoginRequest(
     PhabricatorAuthLoginController $controller) {
 
     $request = $controller->getRequest();
     $viewer = $request->getUser();
 
     $require_captcha = false;
     $captcha_valid = false;
     if (AphrontFormRecaptchaControl::isRecaptchaEnabled()) {
       $failed_attempts = PhabricatorUserLog::loadRecentEventsFromThisIP(
         PhabricatorUserLog::ACTION_LOGIN_FAILURE,
         60 * 15);
       if (count($failed_attempts) > 5) {
         $require_captcha = true;
         $captcha_valid = AphrontFormRecaptchaControl::processCaptcha($request);
       }
     }
 
     $response = null;
     $account = null;
     $log_user = null;
 
     if (!$require_captcha || $captcha_valid) {
       $username_or_email = $request->getStr('username');
       if (strlen($username_or_email)) {
         $user = id(new PhabricatorUser())->loadOneWhere(
           'username = %s',
           $username_or_email);
 
         if (!$user) {
           $user = PhabricatorUser::loadOneWithEmailAddress($username_or_email);
         }
 
         if ($user) {
           $envelope = new PhutilOpaqueEnvelope($request->getStr('password'));
           if ($user->comparePassword($envelope)) {
             $account = $this->loadOrCreateAccount($user->getPHID());
             $log_user = $user;
           }
         }
       }
     }
 
     if (!$account) {
       $log = PhabricatorUserLog::newLog(
         null,
         $log_user,
         PhabricatorUserLog::ACTION_LOGIN_FAILURE);
       $log->save();
 
       $request->clearCookie('phusr');
       $request->clearCookie('phsid');
 
       $response = $controller->buildProviderPageResponse(
         $this,
         $this->renderPasswordLoginForm(
           $request,
           $require_captcha,
           $captcha_valid));
     }
 
     return array($account, $response);
   }
 
   public function shouldRequireRegistrationPassword() {
     return true;
   }
 
   public function getDefaultExternalAccount() {
     $adapter = $this->getAdapter();
 
     return id(new PhabricatorExternalAccount())
       ->setAccountType($adapter->getAdapterType())
       ->setAccountDomain($adapter->getAdapterDomain());
   }
 
   protected function willSaveAccount(PhabricatorExternalAccount $account) {
     parent::willSaveAccount($account);
     $account->setUserPHID($account->getAccountID());
   }
 
   public function willRegisterAccount(PhabricatorExternalAccount $account) {
     parent::willRegisterAccount($account);
     $account->setAccountID($account->getUserPHID());
   }
 
   public static function getPasswordProvider() {
     $providers = self::getAllEnabledProviders();
 
     foreach ($providers as $provider) {
       if ($provider instanceof PhabricatorAuthProviderPassword) {
         return $provider;
       }
     }
 
     return null;
   }
 
   public function willRenderLinkedAccount(
     PhabricatorUser $viewer,
     PhabricatorObjectItemView $item,
     PhabricatorExternalAccount $account) {
     return;
   }
 
   public function shouldAllowAccountRefresh() {
     return false;
   }
 
 }
diff --git a/src/applications/calendar/controller/PhabricatorCalendarEditStatusController.php b/src/applications/calendar/controller/PhabricatorCalendarEditStatusController.php
index 342f36414..9548360b0 100644
--- a/src/applications/calendar/controller/PhabricatorCalendarEditStatusController.php
+++ b/src/applications/calendar/controller/PhabricatorCalendarEditStatusController.php
@@ -1,185 +1,187 @@
 <?php
 
 final class PhabricatorCalendarEditStatusController
   extends PhabricatorCalendarController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function isCreate() {
     return !$this->id;
   }
 
   public function processRequest() {
     $request  = $this->getRequest();
     $user     = $request->getUser();
 
     $start_time = id(new AphrontFormDateControl())
       ->setUser($user)
       ->setName('start')
       ->setLabel(pht('Start'))
       ->setInitialTime(AphrontFormDateControl::TIME_START_OF_DAY);
 
     $end_time = id(new AphrontFormDateControl())
       ->setUser($user)
       ->setName('end')
       ->setLabel(pht('End'))
       ->setInitialTime(AphrontFormDateControl::TIME_END_OF_DAY);
 
     if ($this->isCreate()) {
       $status       = new PhabricatorUserStatus();
       $end_value    = $end_time->readValueFromRequest($request);
       $start_value  = $start_time->readValueFromRequest($request);
       $submit_label = pht('Create');
       $filter       = 'status/create/';
       $page_title   = pht('Create Status');
       $redirect     = 'created';
     } else {
       $status = id(new PhabricatorUserStatus())
         ->loadOneWhere('id = %d', $this->id);
       $end_time->setValue($status->getDateTo());
       $start_time->setValue($status->getDateFrom());
       $submit_label = pht('Update');
       $filter       = 'status/edit/'.$status->getID().'/';
       $page_title   = pht('Update Status');
       $redirect     = 'updated';
 
       if ($status->getUserPHID() != $user->getPHID()) {
         return new Aphront403Response();
       }
     }
 
     $errors = array();
     if ($request->isFormPost()) {
       $type        = $request->getInt('status');
       $start_value = $start_time->readValueFromRequest($request);
       $end_value   = $end_time->readValueFromRequest($request);
       $description = $request->getStr('description');
 
       try {
         $status
           ->setUserPHID($user->getPHID())
           ->setStatus($type)
           ->setDateFrom($start_value)
           ->setDateTo($end_value)
           ->setDescription($description)
           ->save();
       } catch (PhabricatorUserStatusInvalidEpochException $e) {
         $errors[] = pht('Start must be before end.');
       } catch (PhabricatorUserStatusOverlapException $e) {
         $errors[] = pht('There is already a status within the specified '.
                     'timeframe. Edit or delete this existing status.');
       }
 
       if (!$errors) {
         $uri = new PhutilURI($this->getApplicationURI());
         $uri->setQueryParams(
           array(
             'month'   => phabricator_format_local_time($status->getDateFrom(),
                                                        $user,
                                                        'm'),
             'year'    => phabricator_format_local_time($status->getDateFrom(),
                                                        $user,
                                                        'Y'),
             $redirect => true,
           ));
         if ($request->isAjax()) {
           $response = id(new AphrontAjaxResponse())
             ->setContent(array('redirect_uri' => $uri));
         } else {
           $response = id(new AphrontRedirectResponse())
             ->setURI($uri);
         }
         return $response;
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Status can not be set!'))
         ->setErrors($errors);
     }
 
     $status_select = id(new AphrontFormSelectControl())
       ->setLabel(pht('Status'))
       ->setName('status')
       ->setValue($status->getStatus())
       ->setOptions($status->getStatusOptions());
 
     $description = id(new AphrontFormTextAreaControl())
       ->setLabel(pht('Description'))
       ->setName('description')
       ->setValue($status->getDescription());
 
     if ($request->isAjax()) {
       $dialog = id(new AphrontDialogView())
         ->setUser($user)
         ->setTitle($page_title)
         ->setWidth(AphrontDialogView::WIDTH_FORM);
       if ($this->isCreate()) {
         $dialog->setSubmitURI($this->getApplicationURI('status/create/'));
       } else {
         $dialog->setSubmitURI(
           $this->getApplicationURI('status/edit/'.$status->getID().'/'));
       }
-      $form = new AphrontFormLayoutView();
+      $form = new PHUIFormLayoutView();
       if ($error_view) {
         $form->appendChild($error_view);
       }
     } else {
       $form = id(new AphrontFormView())
-        ->setUser($user)
-        ->setFlexible(true);
+        ->setUser($user);
     }
 
     $form
       ->appendChild($status_select)
       ->appendChild($start_time)
       ->appendChild($end_time)
       ->appendChild($description);
 
     if ($request->isAjax()) {
       $dialog->addSubmitButton($submit_label);
       $submit = $dialog;
     } else {
       $submit = id(new AphrontFormSubmitControl())
         ->setValue($submit_label);
     }
     if ($this->isCreate()) {
       $submit->addCancelButton($this->getApplicationURI());
     } else {
       $submit->addCancelButton(
         $this->getApplicationURI('status/delete/'.$status->getID().'/'),
         pht('Delete Status'));
     }
 
     if ($request->isAjax()) {
       $dialog->appendChild($form);
       return id(new AphrontDialogResponse())
         ->setDialog($dialog);
     }
     $form->appendChild($submit);
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($page_title)
+      ->setFormError($error_view)
+      ->setForm($form);
+
     $nav = $this->buildSideNavView($status);
     $nav->selectFilter($filter);
 
     $nav->appendChild(
       array(
-        id(new PhabricatorHeaderView())->setHeader($page_title),
-        $error_view,
-        $form,
+        $form_box,
       ));
 
     return $this->buildApplicationPage(
       $nav,
       array(
         'title' => $page_title,
         'device' => true
       ));
   }
 
 }
diff --git a/src/applications/chatlog/controller/PhabricatorChatLogChannelLogController.php b/src/applications/chatlog/controller/PhabricatorChatLogChannelLogController.php
index d1aada812..f668726df 100644
--- a/src/applications/chatlog/controller/PhabricatorChatLogChannelLogController.php
+++ b/src/applications/chatlog/controller/PhabricatorChatLogChannelLogController.php
@@ -1,263 +1,262 @@
 <?php
 
 final class PhabricatorChatLogChannelLogController
   extends PhabricatorChatLogController {
 
   private $channelID;
 
   public function willProcessRequest(array $data) {
     $this->channelID = $data['channelID'];
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $uri = clone $request->getRequestURI();
     $uri->setQueryParams(array());
 
     $pager = new AphrontCursorPagerView();
     $pager->setURI($uri);
     $pager->setPageSize(250);
 
     $query = id(new PhabricatorChatLogQuery())
       ->setViewer($user)
       ->withChannelIDs(array($this->channelID));
 
     $channel = id(new PhabricatorChatLogChannelQuery())
               ->setViewer($user)
               ->withIDs(array($this->channelID))
               ->executeOne();
 
     if (!$channel) {
       return new Aphront404Response();
     }
 
     list($after, $before, $map) = $this->getPagingParameters($request, $query);
 
     $pager->setAfterID($after);
     $pager->setBeforeID($before);
 
     $logs = $query->executeWithCursorPager($pager);
 
     // Show chat logs oldest-first.
     $logs = array_reverse($logs);
 
 
     // Divide all the logs into blocks, where a block is the same author saying
     // several things in a row. A block ends when another user speaks, or when
     // two minutes pass without the author speaking.
 
     $blocks = array();
     $block = null;
 
     $last_author = null;
     $last_epoch = null;
     foreach ($logs as $log) {
       $this_author = $log->getAuthor();
       $this_epoch  = $log->getEpoch();
 
       // Decide whether we should start a new block or not.
       $new_block = ($this_author !== $last_author) ||
                    ($this_epoch - (60 * 2) > $last_epoch);
 
       if ($new_block) {
         if ($block) {
           $blocks[] = $block;
         }
         $block = array(
           'id'      => $log->getID(),
           'epoch'   => $this_epoch,
           'author'  => $this_author,
           'logs'    => array($log),
         );
       } else {
         $block['logs'][] = $log;
       }
 
       $last_author = $this_author;
       $last_epoch = $this_epoch;
     }
     if ($block) {
       $blocks[] = $block;
     }
 
     // Figure out CSS classes for the blocks. We alternate colors between
     // lines, and highlight the entire block which contains the target ID or
     // date, if applicable.
 
     foreach ($blocks as $key => $block) {
       $classes = array();
       if ($key % 2) {
         $classes[] = 'alternate';
       }
       $ids = mpull($block['logs'], 'getID', 'getID');
       if (array_intersect_key($ids, $map)) {
         $classes[] = 'highlight';
       }
       $blocks[$key]['class'] = $classes ? implode(' ', $classes) : null;
     }
 
 
     require_celerity_resource('phabricator-chatlog-css');
 
     $out = array();
     foreach ($blocks as $block) {
       $author = $block['author'];
       $author = phutil_utf8_shorten($author, 18);
       $author = phutil_tag('td', array('class' => 'author'), $author);
 
       $href = $uri->alter('at', $block['id']);
       $timestamp = $block['epoch'];
       $timestamp = phabricator_datetime($timestamp, $user);
       $timestamp = phutil_tag(
         'a',
           array(
             'href' => $href,
             'class' => 'timestamp'
           ),
         $timestamp);
 
       $message = mpull($block['logs'], 'getMessage');
       $message = implode("\n", $message);
       $message = phutil_tag(
         'td',
           array(
             'class' => 'message'
           ),
           array(
             $timestamp,
             $message));
 
       $out[] = phutil_tag(
         'tr',
         array(
           'class' => $block['class'],
         ),
         array(
           $author,
           $message));
     }
 
     $crumbs = $this
       ->buildApplicationCrumbs()
       ->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName($channel->getChannelName())
           ->setHref($uri));
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->setMethod('GET')
       ->setAction($uri)
-      ->setNoShading(true)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Date'))
           ->setName('date')
           ->setValue($request->getStr('date')))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Jump')));
 
     $filter = new AphrontListFilterView();
     $filter->appendChild($form);
 
     $table = phutil_tag(
       'table',
         array(
           'class' => 'phabricator-chat-log'
         ),
       $out);
 
     $log = phutil_tag(
       'div',
         array(
           'class' => 'phabricator-chat-log-panel'
         ),
         $table);
 
     $content = phutil_tag(
       'div',
         array(
           'class' => 'phabricator-chat-log-wrap'
         ),
         $log);
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
         $filter,
         $content,
         $pager,
       ),
       array(
         'title' => pht('Channel Log'),
         'device' => true,
       ));
   }
 
   /**
    * From request parameters, figure out where we should jump to in the log.
    * We jump to either a date or log ID, but load a few lines of context before
    * it so the user can see the nearby conversation.
    */
   private function getPagingParameters(
     AphrontRequest $request,
     PhabricatorChatLogQuery $query) {
 
     $user = $request->getUser();
 
     $at_id = $request->getInt('at');
     $at_date = $request->getStr('date');
 
     $context_log = null;
     $map = array();
 
     $query = clone $query;
     $query->setLimit(8);
 
     if ($at_id) {
       // Jump to the log in question, and load a few lines of context before
       // it.
       $context_logs = $query
         ->setAfterID($at_id)
         ->execute();
 
       $context_log = last($context_logs);
 
       $map = array(
         $at_id => true,
       );
 
     } else if ($at_date) {
       $timestamp = PhabricatorTime::parseLocalTime($at_date, $user);
 
       if ($timestamp) {
         $context_logs = $query
           ->withMaximumEpoch($timestamp)
           ->execute();
 
         $context_log = last($context_logs);
 
         $target_log = head($context_logs);
         if ($target_log) {
           $map = array(
             $target_log->getID() => true,
           );
         }
       }
     }
 
     if ($context_log) {
       $after = null;
       $before = $context_log->getID() - 1;
     } else {
       $after = $request->getInt('after');
       $before = $request->getInt('before');
     }
 
     return array($after, $before, $map);
   }
 
 }
diff --git a/src/applications/conduit/controller/PhabricatorConduitConsoleController.php b/src/applications/conduit/controller/PhabricatorConduitConsoleController.php
index 57441044c..075bca74e 100644
--- a/src/applications/conduit/controller/PhabricatorConduitConsoleController.php
+++ b/src/applications/conduit/controller/PhabricatorConduitConsoleController.php
@@ -1,131 +1,130 @@
 <?php
 
 /**
  * @group conduit
  */
 final class PhabricatorConduitConsoleController
   extends PhabricatorConduitController {
 
   private $method;
 
   public function willProcessRequest(array $data) {
     $this->method = $data['method'];
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $viewer = $request->getUser();
 
     $method = id(new PhabricatorConduitMethodQuery())
       ->setViewer($viewer)
       ->withMethods(array($this->method))
       ->executeOne();
 
     if (!$method) {
       return new Aphront404Response();
     }
 
     $status = $method->getMethodStatus();
     $reason = $method->getMethodStatusDescription();
 
     $status_view = null;
     if ($status != ConduitAPIMethod::METHOD_STATUS_STABLE) {
       $status_view = new AphrontErrorView();
       switch ($status) {
         case ConduitAPIMethod::METHOD_STATUS_DEPRECATED:
           $status_view->setTitle('Deprecated Method');
           $status_view->appendChild(
             nonempty($reason, "This method is deprecated."));
           break;
         case ConduitAPIMethod::METHOD_STATUS_UNSTABLE:
           $status_view->setSeverity(AphrontErrorView::SEVERITY_WARNING);
           $status_view->setTitle('Unstable Method');
           $status_view->appendChild(
             nonempty(
               $reason,
               "This method is new and unstable. Its interface is subject ".
               "to change."));
           break;
       }
     }
 
     $error_types = $method->defineErrorTypes();
     if ($error_types) {
       $error_description = array();
       foreach ($error_types as $error => $meaning) {
         $error_description[] = hsprintf(
           '<li><strong>%s:</strong> %s</li>',
           $error,
           $meaning);
       }
       $error_description = phutil_tag('ul', array(), $error_description);
     } else {
       $error_description = "This method does not raise any specific errors.";
     }
 
     $form = new AphrontFormView();
     $form
       ->setUser($request->getUser())
       ->setAction('/api/'.$this->method)
       ->addHiddenInput('allowEmptyParams', 1)
-      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel('Description')
           ->setValue($method->getMethodDescription()))
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel('Returns')
           ->setValue($method->defineReturnType()))
       ->appendChild(
         id(new AphrontFormMarkupControl())
           ->setLabel('Errors')
           ->setValue($error_description))
       ->appendChild(hsprintf(
         '<p class="aphront-form-instructions">Enter parameters using '.
         '<strong>JSON</strong>. For instance, to enter a list, type: '.
         '<tt>["apple", "banana", "cherry"]</tt>'));
 
     $params = $method->defineParamTypes();
     foreach ($params as $param => $desc) {
       $form->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel($param)
           ->setName("params[{$param}]")
           ->setCaption($desc));
     }
 
     $form
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel('Output Format')
           ->setName('output')
           ->setOptions(
             array(
               'human' => 'Human Readable',
               'json'  => 'JSON',
             )))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton($this->getApplicationURI())
           ->setValue('Call Method'));
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($method->getAPIMethodName()));
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
         $status_view,
         $form,
       ),
       array(
         'title' => $method->getAPIMethodName(),
         'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/config/controller/PhabricatorConfigEditController.php b/src/applications/config/controller/PhabricatorConfigEditController.php
index 3a1110200..fec7f39c3 100644
--- a/src/applications/config/controller/PhabricatorConfigEditController.php
+++ b/src/applications/config/controller/PhabricatorConfigEditController.php
@@ -1,529 +1,530 @@
 <?php
 
 final class PhabricatorConfigEditController
   extends PhabricatorConfigController {
 
   private $key;
 
   public function willProcessRequest(array $data) {
     $this->key = $data['key'];
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
 
     $options = PhabricatorApplicationConfigOptions::loadAllOptions();
     if (empty($options[$this->key])) {
       $ancient = PhabricatorSetupCheckExtraConfig::getAncientConfig();
       if (isset($ancient[$this->key])) {
         $desc = pht(
           "This configuration has been removed. You can safely delete ".
           "it.\n\n%s",
           $ancient[$this->key]);
       } else {
         $desc = pht(
           "This configuration option is unknown. It may be misspelled, ".
           "or have existed in a previous version of Phabricator.");
       }
 
       // This may be a dead config entry, which existed in the past but no
       // longer exists. Allow it to be edited so it can be reviewed and
       // deleted.
       $option = id(new PhabricatorConfigOption())
         ->setKey($this->key)
         ->setType('wild')
         ->setDefault(null)
         ->setDescription($desc);
       $group = null;
       $group_uri = $this->getApplicationURI();
     } else {
       $option = $options[$this->key];
       $group = $option->getGroup();
       $group_uri = $this->getApplicationURI('group/'.$group->getKey().'/');
     }
 
     $issue = $request->getStr('issue');
     if ($issue) {
       // If the user came here from an open setup issue, send them back.
       $done_uri = $this->getApplicationURI('issue/'.$issue.'/');
     } else {
       $done_uri = $group_uri;
     }
 
     // Check if the config key is already stored in the database.
     // Grab the value if it is.
     $config_entry = id(new PhabricatorConfigEntry())
       ->loadOneWhere(
         'configKey = %s AND namespace = %s',
         $this->key,
         'default');
     if (!$config_entry) {
       $config_entry = id(new PhabricatorConfigEntry())
         ->setConfigKey($this->key)
         ->setNamespace('default')
         ->setIsDeleted(true);
       $config_entry->setPHID($config_entry->generatePHID());
     }
 
     $e_value = null;
     $errors = array();
     if ($request->isFormPost() && !$option->getLocked()) {
 
       $result = $this->readRequest(
         $option,
         $request);
 
       list($e_value, $value_errors, $display_value, $xaction) = $result;
       $errors = array_merge($errors, $value_errors);
 
       if (!$errors) {
 
         $editor = id(new PhabricatorConfigEditor())
           ->setActor($user)
           ->setContinueOnNoEffect(true)
           ->setContentSourceFromRequest($request);
 
         try {
           $editor->applyTransactions($config_entry, array($xaction));
           return id(new AphrontRedirectResponse())->setURI($done_uri);
         } catch (PhabricatorConfigValidationException $ex) {
           $e_value = pht('Invalid');
           $errors[] = $ex->getMessage();
         }
       }
     } else {
       $display_value = $this->getDisplayValue($option, $config_entry);
     }
 
     $form = new AphrontFormView();
-    $form->setFlexible(true);
 
     $error_view = null;
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('You broke everything!'))
         ->setErrors($errors);
     } else if ($option->getHidden()) {
       $msg = pht(
         "This configuration is hidden and can not be edited or viewed from ".
         "the web interface.");
 
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Configuration Hidden'))
         ->setSeverity(AphrontErrorView::SEVERITY_WARNING)
         ->appendChild(phutil_tag('p', array(), $msg));
     } else if ($option->getLocked()) {
       $msg = pht(
         "This configuration is locked and can not be edited from the web ".
         "interface. Use `./bin/config` in `phabricator/` to edit it.");
 
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Configuration Locked'))
         ->setSeverity(AphrontErrorView::SEVERITY_NOTICE)
         ->appendChild(phutil_tag('p', array(), $msg));
     }
 
     if ($option->getHidden()) {
       $control = null;
     } else {
       $control = $this->renderControl(
         $option,
         $display_value,
         $e_value);
     }
 
     $engine = new PhabricatorMarkupEngine();
     $engine->setViewer($user);
     $engine->addObject($option, 'description');
     $engine->process();
     $description = phutil_tag(
       'div',
       array(
         'class' => 'phabricator-remarkup',
       ),
       $engine->getOutput($option, 'description'));
 
     $form
       ->setUser($user)
       ->addHiddenInput('issue', $request->getStr('issue'))
       ->appendChild(
         id(new AphrontFormMarkupControl())
           ->setLabel(pht('Description'))
           ->setValue($description));
 
     if ($group) {
       $extra = $group->renderContextualDescription(
         $option,
         $request);
       if ($extra !== null) {
         $form->appendChild(
           id(new AphrontFormMarkupControl())
             ->setValue($extra));
       }
     }
 
     $form
       ->appendChild($control);
 
     $submit_control = id(new AphrontFormSubmitControl())
       ->addCancelButton($done_uri);
 
     if (!$option->getLocked()) {
       $submit_control->setValue(pht('Save Config Entry'));
     }
 
     $form->appendChild($submit_control);
 
     $examples = $this->renderExamples($option);
     if ($examples) {
       $form->appendChild(
         id(new AphrontFormMarkupControl())
           ->setLabel(pht('Examples'))
           ->setValue($examples));
     }
 
     if (!$option->getHidden()) {
       $form->appendChild(
         id(new AphrontFormMarkupControl())
           ->setLabel(pht('Default'))
           ->setValue($this->renderDefaults($option)));
     }
 
     $title = pht('Edit %s', $this->key);
     $short = pht('Edit');
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($title)
+      ->setFormError($error_view)
+      ->setForm($form);
+
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName(pht('Config'))
         ->setHref($this->getApplicationURI()));
 
     if ($group) {
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName($group->getName())
           ->setHref($group_uri));
     }
 
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($this->key)
         ->setHref('/config/edit/'.$this->key));
 
-
     $xactions = id(new PhabricatorConfigTransactionQuery())
       ->withObjectPHIDs(array($config_entry->getPHID()))
       ->setViewer($user)
       ->execute();
 
     $xaction_view = id(new PhabricatorApplicationTransactionView())
       ->setUser($user)
       ->setObjectPHID($config_entry->getPHID())
       ->setTransactions($xactions);
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        id(new PhabricatorHeaderView())->setHeader($title),
-        $error_view,
-        $form,
+        $form_box,
         $xaction_view,
       ),
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 
   private function readRequest(
     PhabricatorConfigOption $option,
     AphrontRequest $request) {
 
     $xaction = new PhabricatorConfigTransaction();
     $xaction->setTransactionType(PhabricatorConfigTransaction::TYPE_EDIT);
 
     $e_value = null;
     $errors = array();
 
     $value = $request->getStr('value');
     if (!strlen($value)) {
       $value = null;
 
       $xaction->setNewValue(
         array(
           'deleted' => true,
           'value'   => null,
         ));
 
       return array($e_value, $errors, $value, $xaction);
     }
 
     if ($option->isCustomType()) {
       $info = $option->getCustomObject()->readRequest($option, $request);
       list($e_value, $errors, $set_value, $value) = $info;
     } else {
       $type = $option->getType();
       $set_value = null;
 
       switch ($type) {
         case 'int':
           if (preg_match('/^-?[0-9]+$/', trim($value))) {
             $set_value = (int)$value;
           } else {
             $e_value = pht('Invalid');
             $errors[] = pht('Value must be an integer.');
           }
           break;
         case 'string':
         case 'enum':
           $set_value = (string)$value;
           break;
         case 'list<string>':
           $set_value = $request->getStrList('value');
           break;
         case 'set':
           $set_value = array_fill_keys($request->getStrList('value'), true);
           break;
         case 'bool':
           switch ($value) {
             case 'true':
               $set_value = true;
               break;
             case 'false':
               $set_value = false;
               break;
             default:
               $e_value = pht('Invalid');
               $errors[] = pht('Value must be boolean, "true" or "false".');
               break;
           }
           break;
         case 'class':
           if (!class_exists($value)) {
             $e_value = pht('Invalid');
             $errors[] = pht('Class does not exist.');
           } else {
             $base = $option->getBaseClass();
             if (!is_subclass_of($value, $base)) {
               $e_value = pht('Invalid');
               $errors[] = pht('Class is not of valid type.');
             } else {
               $set_value = $value;
             }
           }
           break;
         default:
           $json = json_decode($value, true);
           if ($json === null && strtolower($value) != 'null') {
             $e_value = pht('Invalid');
             $errors[] = pht(
               'The given value must be valid JSON. This means, among '.
               'other things, that you must wrap strings in double-quotes.');
           } else {
             $set_value = $json;
           }
           break;
       }
     }
 
     if (!$errors) {
       $xaction->setNewValue(
         array(
           'deleted' => false,
           'value'   => $set_value,
         ));
     } else {
       $xaction = null;
     }
 
     return array($e_value, $errors, $value, $xaction);
   }
 
   private function getDisplayValue(
     PhabricatorConfigOption $option,
     PhabricatorConfigEntry $entry) {
 
     if ($entry->getIsDeleted()) {
       return null;
     }
 
     if ($option->isCustomType()) {
       return $option->getCustomObject()->getDisplayValue($option, $entry);
     } else {
       $type = $option->getType();
       $value = $entry->getValue();
       switch ($type) {
         case 'int':
         case 'string':
         case 'enum':
         case 'class':
           return $value;
         case 'bool':
           return $value ? 'true' : 'false';
         case 'list<string>':
           return implode("\n", nonempty($value, array()));
         case 'set':
           return implode("\n", nonempty(array_keys($value), array()));
         default:
           return PhabricatorConfigJSON::prettyPrintJSON($value);
       }
     }
   }
 
   private function renderControl(
     PhabricatorConfigOption $option,
     $display_value,
     $e_value) {
 
     if ($option->isCustomType()) {
       $control = $option->getCustomObject()->renderControl(
         $option,
         $display_value,
         $e_value);
     } else {
       $type = $option->getType();
       switch ($type) {
         case 'int':
         case 'string':
           $control = id(new AphrontFormTextControl());
           break;
         case 'bool':
           $control = id(new AphrontFormSelectControl())
             ->setOptions(
               array(
                 ''      => pht('(Use Default)'),
                 'true'  => idx($option->getBoolOptions(), 0),
                 'false' => idx($option->getBoolOptions(), 1),
               ));
           break;
         case 'enum':
           $options = array_mergev(
             array(
               array('' => pht('(Use Default)')),
               $option->getEnumOptions(),
             ));
           $control = id(new AphrontFormSelectControl())
             ->setOptions($options);
           break;
         case 'class':
           $symbols = id(new PhutilSymbolLoader())
             ->setType('class')
             ->setAncestorClass($option->getBaseClass())
             ->setConcreteOnly(true)
             ->selectSymbolsWithoutLoading();
           $names = ipull($symbols, 'name', 'name');
           asort($names);
           $names = array(
             '' => pht('(Use Default)'),
           ) + $names;
 
           $control = id(new AphrontFormSelectControl())
             ->setOptions($names);
           break;
         case 'list<string>':
         case 'set':
           $control = id(new AphrontFormTextAreaControl())
             ->setCaption(pht('Separate values with newlines or commas.'));
           break;
         default:
           $control = id(new AphrontFormTextAreaControl())
             ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_TALL)
             ->setCustomClass('PhabricatorMonospaced')
             ->setCaption(pht('Enter value in JSON.'));
           break;
       }
 
       $control
         ->setLabel(pht('Value'))
         ->setError($e_value)
         ->setValue($display_value)
         ->setName('value');
     }
 
     if ($option->getLocked()) {
       $control->setDisabled(true);
     }
 
     return $control;
   }
 
   private function renderExamples(PhabricatorConfigOption $option) {
     $examples = $option->getExamples();
     if (!$examples) {
       return null;
     }
 
     $table = array();
     $table[] = hsprintf(
       '<tr class="column-labels"><th>%s</th><th>%s</th></tr>',
       pht('Example'),
       pht('Value'));
     foreach ($examples as $example) {
       list($value, $description) = $example;
 
       if ($value === null) {
         $value = phutil_tag('em', array(), pht('(empty)'));
       } else {
         if (is_array($value)) {
           $value = implode("\n", $value);
         }
         $value = phutil_escape_html_newlines($value);
       }
 
       $table[] = hsprintf(
         '<tr><th>%s</th><td>%s</td></tr>',
         $description,
         $value);
     }
 
     require_celerity_resource('config-options-css');
 
     return phutil_tag(
       'table',
       array(
         'class' => 'config-option-table',
       ),
       $table);
   }
 
   private function renderDefaults(PhabricatorConfigOption $option) {
     $stack = PhabricatorEnv::getConfigSourceStack();
     $stack = $stack->getStack();
 
     $table = array();
     $table[] = hsprintf(
       '<tr class="column-labels"><th>%s</th><th>%s</th></tr>',
       pht('Source'),
       pht('Value'));
     foreach ($stack as $key => $source) {
       $value = $source->getKeys(
         array(
           $option->getKey(),
         ));
 
       if (!array_key_exists($option->getKey(), $value)) {
         $value = phutil_tag('em', array(), pht('(empty)'));
       } else {
         $value = PhabricatorConfigJSON::prettyPrintJSON(
           $value[$option->getKey()]);
       }
 
       $table[] = hsprintf(
         '<tr><th>%s</th><td>%s</td></tr>',
         $source->getName(),
         $value);
     }
 
     require_celerity_resource('config-options-css');
 
     return phutil_tag(
       'table',
       array(
         'class' => 'config-option-table',
       ),
       $table);
   }
 
 }
diff --git a/src/applications/conpherence/controller/ConpherenceNewController.php b/src/applications/conpherence/controller/ConpherenceNewController.php
index 25efe8c93..b1a459e6c 100644
--- a/src/applications/conpherence/controller/ConpherenceNewController.php
+++ b/src/applications/conpherence/controller/ConpherenceNewController.php
@@ -1,99 +1,99 @@
 <?php
 
 /**
  * @group conpherence
  */
 final class ConpherenceNewController extends ConpherenceController {
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $title = pht('New Message');
     $participants = array();
     $message = '';
     $e_participants = null;
     $e_message = null;
 
     // this comes from ajax requests from all over. should be a single phid.
     $participant_prefill = $request->getStr('participant');
     if ($participant_prefill) {
       $participants[] = $participant_prefill;
     }
 
     if ($request->isFormPost()) {
       $participants = $request->getArr('participants');
       $message = $request->getStr('message');
       list($error_codes, $conpherence) = ConpherenceEditor::createConpherence(
         $user,
         $participants,
         $conpherence_title = null,
         $message,
         PhabricatorContentSource::newFromRequest($request));
 
       if ($error_codes) {
         foreach ($error_codes as $error_code) {
           switch ($error_code) {
             case ConpherenceEditor::ERROR_EMPTY_MESSAGE:
               $e_message = true;
               break;
             case ConpherenceEditor::ERROR_EMPTY_PARTICIPANTS:
               $e_participants = true;
               break;
           }
         }
       } else {
         $uri = $this->getApplicationURI($conpherence->getID());
         return id(new AphrontRedirectResponse())
           ->setURI($uri);
       }
     }
 
     $participant_handles = array();
     if ($participants) {
       $handles = id(new PhabricatorObjectHandleData($participants))
         ->setViewer($user)
         ->loadHandles();
       $participant_handles = mpull($handles, 'getFullName', 'getPHID');
     }
 
     $submit_uri = $this->getApplicationURI('new/');
     $cancel_uri = $this->getApplicationURI();
 
     // TODO - we can get a better cancel_uri once we get better at crazy
     // ajax jonx T2086
     if ($participant_prefill) {
       $handle = $handles[$participant_prefill];
       $cancel_uri = $handle->getURI();
     }
 
     $dialog = id(new AphrontDialogView())
       ->setWidth(AphrontDialogView::WIDTH_FORM)
       ->setUser($user)
       ->setTitle($title)
       ->addCancelButton($cancel_uri)
       ->addSubmitButton(pht('Send Message'));
 
-    $form = id(new AphrontFormLayoutView())
+    $form = id(new PHUIFormLayoutView())
       ->setUser($user)
       ->setFullWidth(true)
       ->appendChild(
         id(new AphrontFormTokenizerControl())
         ->setName('participants')
         ->setValue($participant_handles)
         ->setUser($user)
         ->setDatasource('/typeahead/common/users/')
         ->setLabel(pht('To'))
         ->setError($e_participants))
       ->appendChild(
         id(new PhabricatorRemarkupControl())
         ->setName('message')
         ->setValue($message)
         ->setLabel(pht('Message'))
         ->setError($e_message));
 
     $dialog->appendChild($form);
 
     return id(new AphrontDialogResponse())->setDialog($dialog);
   }
 }
diff --git a/src/applications/conpherence/controller/ConpherenceUpdateController.php b/src/applications/conpherence/controller/ConpherenceUpdateController.php
index 92e0237fb..e92defbc7 100644
--- a/src/applications/conpherence/controller/ConpherenceUpdateController.php
+++ b/src/applications/conpherence/controller/ConpherenceUpdateController.php
@@ -1,339 +1,338 @@
 <?php
 
 /**
  * @group conpherence
  */
 final class ConpherenceUpdateController
   extends ConpherenceController {
 
   private $conpherenceID;
 
   public function setConpherenceID($conpherence_id) {
     $this->conpherenceID = $conpherence_id;
     return $this;
   }
   public function getConpherenceID() {
     return $this->conpherenceID;
   }
   public function willProcessRequest(array $data) {
     $this->setConpherenceID(idx($data, 'id'));
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
     $conpherence_id = $this->getConpherenceID();
     if (!$conpherence_id) {
       return new Aphront404Response();
     }
 
     $conpherence = id(new ConpherenceThreadQuery())
       ->setViewer($user)
       ->withIDs(array($conpherence_id))
       ->needFilePHIDs(true)
       ->executeOne();
 
     $action = $request->getStr('action', ConpherenceUpdateActions::METADATA);
     $latest_transaction_id = null;
     $response_mode = 'ajax';
     $error_view = null;
     $e_file = array();
     $errors = array();
     if ($request->isFormPost()) {
       $editor = id(new ConpherenceEditor())
         ->setContinueOnNoEffect($request->isContinueRequest())
         ->setContentSourceFromRequest($request)
         ->setActor($user);
 
       switch ($action) {
         case ConpherenceUpdateActions::MESSAGE:
           $message = $request->getStr('text');
           $xactions = $editor->generateTransactionsFromText(
             $conpherence,
             $message);
           break;
         case ConpherenceUpdateActions::ADD_PERSON:
           $xactions = array();
           $person_phids = $request->getArr('add_person');
           if (!empty($person_phids)) {
             $xactions[] = id(new ConpherenceTransaction())
               ->setTransactionType(
                 ConpherenceTransactionType::TYPE_PARTICIPANTS)
               ->setNewValue(array('+' => $person_phids));
           }
           break;
         case ConpherenceUpdateActions::REMOVE_PERSON:
           $xactions = array();
           if (!$request->isContinueRequest()) {
             // do nothing; we'll display a confirmation dialogue instead
             break;
           }
           $person_phid = $request->getStr('remove_person');
           if ($person_phid && $person_phid == $user->getPHID()) {
             $xactions[] = id(new ConpherenceTransaction())
               ->setTransactionType(
                 ConpherenceTransactionType::TYPE_PARTICIPANTS)
               ->setNewValue(array('-' => array($person_phid)));
             $response_mode = 'go-home';
           }
           break;
         case ConpherenceUpdateActions::NOTIFICATIONS:
           $notifications = $request->getStr('notifications');
           $participant = $conpherence->getParticipant($user->getPHID());
           $participant->setSettings(array('notifications' => $notifications));
           $participant->save();
           $result = pht(
             'Updated notification settings to "%s".',
             ConpherenceSettings::getHumanString($notifications));
           return id(new AphrontAjaxResponse())
             ->setContent($result);
           break;
         case ConpherenceUpdateActions::METADATA:
           $xactions = array();
           $updated = false;
           // all metadata updates are continue requests
           if (!$request->isContinueRequest()) {
             break;
           }
 
           $title = $request->getStr('title');
           if ($title != $conpherence->getTitle()) {
             $xactions[] = id(new ConpherenceTransaction())
               ->setTransactionType(ConpherenceTransactionType::TYPE_TITLE)
               ->setNewValue($title);
             $updated = true;
             $response_mode = 'redirect';
           }
           if (!$updated) {
             $errors[] = pht(
               'That was a non-update. Try cancel.');
           }
           break;
         default:
           throw new Exception('Unknown action: '.$action);
           break;
       }
       if ($xactions) {
         try {
           $xactions = $editor->applyTransactions($conpherence, $xactions);
         } catch (PhabricatorApplicationTransactionNoEffectException $ex) {
           return id(new PhabricatorApplicationTransactionNoEffectResponse())
             ->setCancelURI($this->getApplicationURI($conpherence_id.'/'))
             ->setException($ex);
         }
         switch ($response_mode) {
           case 'ajax':
             $latest_transaction_id = $request->getInt('latest_transaction_id');
             $content = $this->loadAndRenderUpdates(
               $action,
               $conpherence_id,
               $latest_transaction_id);
             return id(new AphrontAjaxResponse())
               ->setContent($content);
             break;
           case 'go-home':
             return id(new AphrontRedirectResponse())
               ->setURI($this->getApplicationURI());
             break;
           case 'redirect':
           default:
             return id(new AphrontRedirectResponse())
               ->setURI($this->getApplicationURI($conpherence->getID().'/'));
             break;
         }
       }
     }
 
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Errors editing conpherence.'))
         ->setInsideDialogue(true)
         ->setErrors($errors);
     }
 
     switch ($action) {
       case ConpherenceUpdateActions::ADD_PERSON:
         $dialogue = $this->renderAddPersonDialogue($conpherence);
         break;
       case ConpherenceUpdateActions::REMOVE_PERSON:
         $dialogue = $this->renderRemovePersonDialogue($conpherence);
         break;
       case ConpherenceUpdateActions::METADATA:
       default:
         $dialogue = $this->renderMetadataDialogue($conpherence, $error_view);
         break;
     }
 
     return id(new AphrontDialogResponse())
       ->setDialog($dialogue
         ->setUser($user)
         ->setWidth(AphrontDialogView::WIDTH_FORM)
         ->setSubmitURI($this->getApplicationURI('update/'.$conpherence_id.'/'))
         ->addSubmitButton()
         ->addCancelButton($this->getApplicationURI($conpherence->getID().'/')));
 
   }
 
   private function renderAddPersonDialogue(
     ConpherenceThread $conpherence) {
 
     $request = $this->getRequest();
     $user = $request->getUser();
     $add_person = $request->getStr('add_person');
 
-    $form = id(new AphrontFormLayoutView())
+    $form = id(new PHUIFormLayoutView())
       ->setUser($user)
       ->setFullWidth(true)
       ->appendChild(
         id(new AphrontFormTokenizerControl())
         ->setName('add_person')
         ->setUser($user)
         ->setDatasource('/typeahead/common/users/'));
 
     require_celerity_resource('conpherence-update-css');
     return id(new AphrontDialogView())
       ->setTitle(pht('Add Participants'))
       ->addHiddenInput('action', 'add_person')
       ->appendChild($form);
     }
 
   private function renderRemovePersonDialogue(
     ConpherenceThread $conpherence) {
 
     $request = $this->getRequest();
     $user = $request->getUser();
     $remove_person = $request->getStr('remove_person');
     $participants = $conpherence->getParticipants();
     $message = pht(
       'Are you sure you want to remove yourself from this conpherence? ');
     if (count($participants) == 1) {
       $message .= pht(
         'The conpherence will be inaccessible forever and ever.');
     } else {
       $message .= pht(
         'Someone else in the conpherence can add you back later.');
     }
     $body = phutil_tag(
       'p',
       array(
       ),
       $message);
 
     require_celerity_resource('conpherence-update-css');
     return id(new AphrontDialogView())
       ->setTitle(pht('Remove Participants'))
-      ->setHeaderColor(PhabricatorActionHeaderView::HEADER_RED)
       ->addHiddenInput('action', 'remove_person')
       ->addHiddenInput('__continue__', true)
       ->addHiddenInput('remove_person', $remove_person)
       ->appendChild($body);
   }
 
   private function renderMetadataDialogue(
     ConpherenceThread $conpherence,
     $error_view) {
 
-    $form = id(new AphrontFormLayoutView())
+    $form = id(new PHUIFormLayoutView())
       ->appendChild($error_view)
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel(pht('Title'))
         ->setName('title')
         ->setValue($conpherence->getTitle()));
 
     require_celerity_resource('conpherence-update-css');
     return id(new AphrontDialogView())
       ->setTitle(pht('Update Conpherence'))
       ->addHiddenInput('action', 'metadata')
       ->addHiddenInput('__continue__', true)
       ->appendChild($form);
   }
 
   private function loadAndRenderUpdates(
     $action,
     $conpherence_id,
     $latest_transaction_id) {
 
     $need_widget_data = false;
     $need_transactions = false;
     switch ($action) {
       case ConpherenceUpdateActions::METADATA:
         $need_transactions = true;
         break;
       case ConpherenceUpdateActions::MESSAGE:
       case ConpherenceUpdateActions::ADD_PERSON:
         $need_transactions = true;
         $need_widget_data = true;
         break;
       case ConpherenceUpdateActions::REMOVE_PERSON:
       case ConpherenceUpdateActions::NOTIFICATIONS:
       default:
         break;
 
     }
     $user = $this->getRequest()->getUser();
     $conpherence = id(new ConpherenceThreadQuery())
       ->setViewer($user)
       ->setAfterTransactionID($latest_transaction_id)
       ->needWidgetData($need_widget_data)
       ->needTransactions($need_transactions)
       ->withIDs(array($conpherence_id))
       ->executeOne();
 
     if ($need_transactions) {
       $data = $this->renderConpherenceTransactions($conpherence);
     } else {
       $data = array();
     }
     $rendered_transactions = idx($data, 'transactions');
     $new_latest_transaction_id = idx($data, 'latest_transaction_id');
 
     $widget_uri = $this->getApplicationURI('update/'.$conpherence->getID().'/');
     $nav_item = null;
     $header = null;
     $people_widget = null;
     $file_widget = null;
     switch ($action) {
       case ConpherenceUpdateActions::METADATA:
         $header = $this->buildHeaderPaneContent($conpherence);
         $nav_item = id(new ConpherenceThreadListView())
           ->setUser($user)
           ->setBaseURI($this->getApplicationURI())
           ->renderSingleThread($conpherence);
         break;
       case ConpherenceUpdateActions::MESSAGE:
         $file_widget = id(new ConpherenceFileWidgetView())
           ->setUser($this->getRequest()->getUser())
           ->setConpherence($conpherence)
           ->setUpdateURI($widget_uri);
         break;
       case ConpherenceUpdateActions::ADD_PERSON:
         $people_widget = id(new ConpherencePeopleWidgetView())
           ->setUser($user)
           ->setConpherence($conpherence)
           ->setUpdateURI($widget_uri);
         break;
       case ConpherenceUpdateActions::REMOVE_PERSON:
       case ConpherenceUpdateActions::NOTIFICATIONS:
       default:
         break;
     }
 
     $people_html = null;
     if ($people_widget) {
       $people_html = hsprintf('%s', $people_widget->render());
     }
     $content = array(
       'transactions' => hsprintf('%s', $rendered_transactions),
       'latest_transaction_id' => $new_latest_transaction_id,
       'nav_item' => hsprintf('%s', $nav_item),
       'conpherence_phid' => $conpherence->getPHID(),
       'header' => hsprintf('%s', $header),
       'file_widget' => $file_widget ? $file_widget->render() : null,
       'people_widget' => $people_html,
     );
 
     return $content;
   }
 
 }
diff --git a/src/applications/conpherence/controller/ConpherenceViewController.php b/src/applications/conpherence/controller/ConpherenceViewController.php
index c65901edb..d57f7de89 100644
--- a/src/applications/conpherence/controller/ConpherenceViewController.php
+++ b/src/applications/conpherence/controller/ConpherenceViewController.php
@@ -1,167 +1,166 @@
 <?php
 
 /**
  * @group conpherence
  */
 final class ConpherenceViewController extends
   ConpherenceController {
 
   private $conpherenceID;
   private $conpherence;
 
   public function setConpherence(ConpherenceThread $conpherence) {
     $this->conpherence = $conpherence;
     return $this;
   }
   public function getConpherence() {
     return $this->conpherence;
   }
 
   public function setConpherenceID($conpherence_id) {
     $this->conpherenceID = $conpherence_id;
     return $this;
   }
   public function getConpherenceID() {
     return $this->conpherenceID;
   }
 
   public function willProcessRequest(array $data) {
     $this->setConpherenceID(idx($data, 'id'));
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $conpherence_id = $this->getConpherenceID();
     if (!$conpherence_id) {
       return new Aphront404Response();
     }
     $query = id(new ConpherenceThreadQuery())
       ->setViewer($user)
       ->withIDs(array($conpherence_id))
       ->needParticipantCache(true)
       ->needTransactions(true)
       ->setTransactionLimit(ConpherenceThreadQuery::TRANSACTION_LIMIT);
     $before_transaction_id = $request->getInt('oldest_transaction_id');
     if ($before_transaction_id) {
       $query
         ->setBeforeTransactionID($before_transaction_id);
     }
     $conpherence = $query->executeOne();
     if (!$conpherence) {
       return new Aphront404Response();
     }
     $this->setConpherence($conpherence);
 
     $participant = $conpherence->getParticipant($user->getPHID());
     $transactions = $conpherence->getTransactions();
     $latest_transaction = end($transactions);
     $write_guard = AphrontWriteGuard::beginScopedUnguardedWrites();
     $participant->markUpToDate($conpherence, $latest_transaction);
     unset($write_guard);
 
     $data = $this->renderConpherenceTransactions($conpherence);
     $messages = $this->renderMessagePaneContent(
       $data['transactions'],
       $data['oldest_transaction_id']);
     if ($before_transaction_id) {
       $header = null;
       $form = null;
       $content = array('messages' => $messages);
     } else {
       $header = $this->buildHeaderPaneContent($conpherence);
       $form = $this->renderFormContent($data['latest_transaction_id']);
       $content = array(
         'header' => $header,
         'messages' => $messages,
         'form' => $form
       );
     }
 
     if ($request->isAjax()) {
       return id(new AphrontAjaxResponse())->setContent($content);
     }
 
     $layout = id(new ConpherenceLayoutView())
       ->setBaseURI($this->getApplicationURI())
       ->setThread($conpherence)
       ->setHeader($header)
       ->setMessages($messages)
       ->setReplyForm($form)
       ->setRole('thread');
 
     $title = $conpherence->getTitle();
     if (!$title) {
       $title = pht('[No Title]');
     }
     return $this->buildApplicationPage(
       $layout,
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 
   private function renderMessagePaneContent(
     array $transactions,
     $oldest_transaction_id) {
 
     $scrollbutton = '';
     if ($oldest_transaction_id) {
       $scrollbutton = javelin_tag(
         'a',
         array(
           'href' => '#',
           'mustcapture' => true,
           'sigil' => 'show-older-messages',
           'class' => 'conpherence-show-older-messages',
           'meta' => array(
             'oldest_transaction_id' => $oldest_transaction_id
           )
         ),
         pht('Show Older Messages'));
     }
 
     return hsprintf('%s%s', $scrollbutton, $transactions);
   }
 
   private function renderFormContent($latest_transaction_id) {
 
     $conpherence = $this->getConpherence();
     $user = $this->getRequest()->getUser();
     $update_uri = $this->getApplicationURI('update/'.$conpherence->getID().'/');
 
     Javelin::initBehavior('conpherence-pontificate');
 
     $form =
       id(new AphrontFormView())
       ->setAction($update_uri)
-      ->setFlexible(true)
       ->addSigil('conpherence-pontificate')
       ->setWorkflow(true)
       ->setUser($user)
       ->addHiddenInput('action', 'message')
       ->appendChild(
         id(new PhabricatorRemarkupControl())
         ->setUser($user)
         ->setName('text'))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Pontificate')))
       ->appendChild(
         javelin_tag(
           'input',
           array(
             'type' => 'hidden',
             'name' => 'latest_transaction_id',
             'value' => $latest_transaction_id,
             'sigil' => 'latest-transaction-id'
           ),
           ''))
       ->render();
 
     return $form;
   }
 
 }
diff --git a/src/applications/countdown/controller/PhabricatorCountdownEditController.php b/src/applications/countdown/controller/PhabricatorCountdownEditController.php
index 77cb811ba..4e3832652 100644
--- a/src/applications/countdown/controller/PhabricatorCountdownEditController.php
+++ b/src/applications/countdown/controller/PhabricatorCountdownEditController.php
@@ -1,142 +1,146 @@
 <?php
 
 /**
  * @group countdown
  */
 final class PhabricatorCountdownEditController
   extends PhabricatorCountdownController {
 
   private $id;
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     if ($this->id) {
+      $page_title = pht('Edit Countdown');
       $countdown = id(new PhabricatorCountdownQuery())
         ->setViewer($user)
         ->withIDs(array($this->id))
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_VIEW,
             PhabricatorPolicyCapability::CAN_EDIT,
           ))
         ->executeOne();
 
       // If no countdown is found
       if (!$countdown) {
         return new Aphront404Response();
       }
     } else {
+      $page_title = pht('Create Countdown');
       $countdown = new PhabricatorCountdown();
       $countdown->setEpoch(time());
     }
 
     $error_view = null;
     $e_text = null;
 
     if ($request->isFormPost()) {
       $errors = array();
       $title = $request->getStr('title');
       $epoch = $request->getStr('epoch');
 
       $e_text = null;
       if (!strlen($title)) {
         $e_text = pht('Required');
         $errors[] = pht('You must give the countdown a name.');
       }
 
       if (strlen($epoch)) {
         $timestamp = PhabricatorTime::parseLocalTime($epoch, $user);
         if (!$timestamp) {
           $errors[] = pht(
             'You entered an incorrect date. You can enter date '.
             'like \'2011-06-26 13:33:37\' to create an event at '.
             '13:33:37 on the 26th of June 2011.');
         }
       } else {
         $e_epoch = pht('Required');
         $errors[] = pht('You must specify the end date for a countdown.');
       }
 
       if (!count($errors)) {
         $countdown->setTitle($title);
         $countdown->setEpoch($timestamp);
         $countdown->setAuthorPHID($user->getPHID());
         $countdown->save();
         return id(new AphrontRedirectResponse())
           ->setURI('/countdown/'.$countdown->getID().'/');
       } else {
         $error_view = id(new AphrontErrorView())
           ->setErrors($errors)
           ->setTitle(pht('It\'s not The Final Countdown (du nu nuuu nun)' .
             ' until you fix these problem'));
       }
     }
 
     if ($countdown->getEpoch()) {
       $display_epoch = phabricator_datetime($countdown->getEpoch(), $user);
     } else {
       $display_epoch = $request->getStr('epoch');
     }
 
     $crumbs = $this->buildApplicationCrumbs();
 
     $cancel_uri = '/countdown/';
     if ($countdown->getID()) {
       $cancel_uri = '/countdown/'.$countdown->getID().'/';
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName('C'.$countdown->getID())
           ->setHref($cancel_uri));
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht('Edit')));
       $submit_label = pht('Save Changes');
     } else {
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht('Create Countdown')));
       $submit_label = pht('Create Countdown');
     }
 
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->setAction($request->getRequestURI()->getPath())
-      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Title'))
           ->setValue($countdown->getTitle())
           ->setName('title'))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('End Date'))
           ->setValue($display_epoch)
           ->setName('epoch')
           ->setCaption(pht('Examples: '.
             '2011-12-25 or 3 hours or '.
             'June 8 2011, 5 PM.')))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton($cancel_uri)
           ->setValue($submit_label));
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($page_title)
+      ->setFormError($error_view)
+      ->setForm($form);
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $error_view,
-        $form,
+        $form_box,
       ),
       array(
-        'title' => pht('Edit Countdown'),
+        'title' => $page_title,
         'device' => true,
       ));
   }
 }
diff --git a/src/applications/differential/controller/DifferentialDiffCreateController.php b/src/applications/differential/controller/DifferentialDiffCreateController.php
index 20e8f87b5..43755857d 100644
--- a/src/applications/differential/controller/DifferentialDiffCreateController.php
+++ b/src/applications/differential/controller/DifferentialDiffCreateController.php
@@ -1,108 +1,111 @@
 <?php
 
 final class DifferentialDiffCreateController extends DifferentialController {
 
   public function processRequest() {
 
     $request = $this->getRequest();
 
     $errors = array();
     $e_diff = null;
     $e_file = null;
     if ($request->isFormPost()) {
       $diff = null;
 
       if ($request->getFileExists('diff-file')) {
         $diff = PhabricatorFile::readUploadedFileData($_FILES['diff-file']);
       } else {
         $diff = $request->getStr('diff');
       }
 
       if (!strlen($diff)) {
         $errors[] = pht(
           "You can not create an empty diff. Copy/paste a diff, or upload a ".
           "diff file.");
         $e_diff = pht('Required');
         $e_file = pht('Required');
       }
 
       if (!$errors) {
         $call = new ConduitCall(
           'differential.createrawdiff',
           array(
             'diff' => $diff,
             ));
         $call->setUser($request->getUser());
         $result = $call->execute();
 
         $path = id(new PhutilURI($result['uri']))->getPath();
         return id(new AphrontRedirectResponse())->setURI($path);
       }
     }
 
     $form = new AphrontFormView();
-    $form->setFlexible(true);
     $arcanist_href = PhabricatorEnv::getDoclink(
       'article/Arcanist_User_Guide.html');
     $arcanist_link = phutil_tag(
       'a',
       array(
         'href' => $arcanist_href,
         'target' => '_blank',
       ),
       'Arcanist');
 
     $cancel_uri = $this->getApplicationURI();
 
     $form
       ->setAction('/differential/diff/create/')
       ->setEncType('multipart/form-data')
       ->setUser($request->getUser())
       ->appendInstructions(
         pht(
           'The best way to create a Differential diff is by using %s, but you '.
           'can also just paste a diff (for example, from %s, %s or %s) into '.
           'this box, or upload a diff file.',
           $arcanist_link,
           phutil_tag('tt', array(), 'svn diff'),
           phutil_tag('tt', array(), 'git diff'),
           phutil_tag('tt', array(), 'hg diff')))
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setLabel(pht('Raw Diff'))
           ->setName('diff')
           ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_TALL)
           ->setError($e_diff))
       ->appendChild(
         id(new AphrontFormFileControl())
           ->setLabel(pht('Raw Diff From File'))
           ->setName('diff-file')
           ->setError($e_file))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton($cancel_uri)
           ->setValue(pht("Create Diff")));
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Create New Diff'))
+      ->setFormError($errors)
+      ->setForm($form);
+
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName(pht('Create Diff')));
 
     if ($errors) {
       $errors = id(new AphrontErrorView())
         ->setErrors($errors);
     }
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $errors,
-        $form
+        $form_box,
       ),
       array(
         'title' => pht('Create Diff'),
         'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/differential/controller/DifferentialDiffViewController.php b/src/applications/differential/controller/DifferentialDiffViewController.php
index 346927e90..cb2fd99e0 100644
--- a/src/applications/differential/controller/DifferentialDiffViewController.php
+++ b/src/applications/differential/controller/DifferentialDiffViewController.php
@@ -1,167 +1,166 @@
 <?php
 
 final class DifferentialDiffViewController extends DifferentialController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $viewer = $request->getUser();
 
     $diff = id(new DifferentialDiffQuery())
       ->setViewer($viewer)
       ->withIDs(array($this->id))
       ->executeOne();
     if (!$diff) {
       return new Aphront404Response();
     }
 
     if ($diff->getRevisionID()) {
       $top_part = id(new AphrontErrorView())
         ->setSeverity(AphrontErrorView::SEVERITY_NOTICE)
         ->appendChild(
           pht(
             'This diff belongs to revision %s.',
             phutil_tag(
               'a',
               array(
                 'href' => '/D'.$diff->getRevisionID(),
               ),
               'D'.$diff->getRevisionID())));
     } else {
       // TODO: implement optgroup support in AphrontFormSelectControl?
       $select = array();
       $select[] = hsprintf('<optgroup label="%s">', pht('Create New Revision'));
       $select[] = hsprintf(
         '<option value="">%s</option>',
         pht('Create a new Revision...'));
       $select[] = hsprintf('</optgroup>');
 
       $revisions = id(new DifferentialRevisionQuery())
         ->setViewer($viewer)
         ->withAuthors(array($viewer->getPHID()))
         ->withStatus(DifferentialRevisionQuery::STATUS_OPEN)
         ->execute();
 
       if ($revisions) {
         $select[] = hsprintf(
           '<optgroup label="%s">',
           pht('Update Existing Revision'));
         foreach ($revisions as $revision) {
           $select[] = phutil_tag(
             'option',
             array(
               'value' => $revision->getID(),
             ),
             'D'.$revision->getID().' '.$revision->getTitle());
         }
         $select[] = hsprintf('</optgroup>');
       }
 
       $select = phutil_tag(
         'select',
         array('name' => 'revisionID'),
         $select);
 
       $form = id(new AphrontFormView())
         ->setUser($request->getUser())
         ->setAction('/differential/revision/edit/')
         ->addHiddenInput('diffID', $diff->getID())
         ->addHiddenInput('viaDiffView', 1)
-        ->setFlexible(true)
         ->appendRemarkupInstructions(
           pht(
             'Review the diff for correctness. When you are satisfied, either '.
             '**create a new revision** or **update an existing revision**.'))
         ->appendChild(
           id(new AphrontFormMarkupControl())
           ->setLabel(pht('Attach To'))
           ->setValue($select))
         ->appendChild(
           id(new AphrontFormSubmitControl())
           ->setValue(pht('Continue')));
 
       $top_part = $form;
     }
 
     $props = id(new DifferentialDiffProperty())->loadAllWhere(
       'diffID = %d',
       $diff->getID());
     $props = mpull($props, 'getData', 'getName');
 
     $aux_fields = DifferentialFieldSelector::newSelector()
       ->getFieldSpecifications();
     foreach ($aux_fields as $key => $aux_field) {
       if (!$aux_field->shouldAppearOnDiffView()) {
         unset($aux_fields[$key]);
       } else {
         $aux_field->setUser($this->getRequest()->getUser());
       }
     }
 
     $dict = array();
     foreach ($aux_fields as $key => $aux_field) {
       $aux_field->setDiff($diff);
       $aux_field->setManualDiff($diff);
       $aux_field->setDiffProperties($props);
       $value = $aux_field->renderValueForDiffView();
       if (strlen($value)) {
         $label = rtrim($aux_field->renderLabelForDiffView(), ':');
         $dict[$label] = $value;
       }
     }
 
     $property_head = id(new PhabricatorHeaderView())
       ->setHeader(pht('Properties'));
 
     $property_view = new PhabricatorPropertyListView();
     foreach ($dict as $key => $value) {
       $property_view->addProperty($key, $value);
     }
 
     $changesets = $diff->loadChangesets();
     $changesets = msort($changesets, 'getSortKey');
 
     $table_of_contents = id(new DifferentialDiffTableOfContentsView())
       ->setChangesets($changesets)
       ->setVisibleChangesets($changesets)
       ->setUnitTestData(idx($props, 'arc:unit', array()));
 
     $refs = array();
     foreach ($changesets as $changeset) {
       $refs[$changeset->getID()] = $changeset->getID();
     }
 
     $details = id(new DifferentialChangesetListView())
       ->setChangesets($changesets)
       ->setVisibleChangesets($changesets)
       ->setRenderingReferences($refs)
       ->setStandaloneURI('/differential/changeset/')
       ->setDiff($diff)
       ->setTitle(pht('Diff %d', $diff->getID()))
       ->setUser($request->getUser());
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName(pht('Diff %d', $diff->getID())));
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
         $top_part,
         $property_head,
         $property_view,
         $table_of_contents,
         $details,
       ),
       array(
         'title' => pht('Diff View'),
       ));
   }
 
 }
diff --git a/src/applications/differential/controller/DifferentialRevisionEditController.php b/src/applications/differential/controller/DifferentialRevisionEditController.php
index bda7093d5..e31a15dee 100644
--- a/src/applications/differential/controller/DifferentialRevisionEditController.php
+++ b/src/applications/differential/controller/DifferentialRevisionEditController.php
@@ -1,224 +1,223 @@
 <?php
 
 final class DifferentialRevisionEditController extends DifferentialController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $viewer = $request->getUser();
 
     if (!$this->id) {
       $this->id = $request->getInt('revisionID');
     }
 
     if ($this->id) {
       $revision = id(new DifferentialRevisionQuery())
         ->setViewer($viewer)
         ->withIDs(array($this->id))
         ->needRelationships(true)
         ->needReviewerStatus(true)
         ->executeOne();
       if (!$revision) {
         return new Aphront404Response();
       }
     } else {
       $revision = new DifferentialRevision();
       $revision->attachRelationships(array());
     }
 
     $aux_fields = $this->loadAuxiliaryFields($revision);
 
     $diff_id = $request->getInt('diffID');
     if ($diff_id) {
       $diff = id(new DifferentialDiffQuery())
         ->setViewer($viewer)
         ->withIDs(array($diff_id))
         ->executeOne();
       if (!$diff) {
         return new Aphront404Response();
       }
       if ($diff->getRevisionID()) {
         // TODO: Redirect?
         throw new Exception("This diff is already attached to a revision!");
       }
     } else {
       $diff = null;
     }
 
     $errors = array();
 
 
     if ($request->isFormPost() && !$request->getStr('viaDiffView')) {
       foreach ($aux_fields as $aux_field) {
         $aux_field->setValueFromRequest($request);
         try {
           $aux_field->validateField();
         } catch (DifferentialFieldValidationException $ex) {
           $errors[] = $ex->getMessage();
         }
       }
 
       if (!$errors) {
         $is_new = !$revision->getID();
         $user = $request->getUser();
 
         $event = new PhabricatorEvent(
           PhabricatorEventType::TYPE_DIFFERENTIAL_WILLEDITREVISION,
             array(
               'revision'      => $revision,
               'new'           => $is_new,
             ));
 
         $event->setUser($user);
         $event->setAphrontRequest($request);
         PhutilEventEngine::dispatchEvent($event);
 
         $editor = new DifferentialRevisionEditor($revision);
         $editor->setActor($request->getUser());
         if ($diff) {
           $editor->addDiff($diff, $request->getStr('comments'));
         }
         $editor->setAuxiliaryFields($aux_fields);
         $editor->save();
 
         $event = new PhabricatorEvent(
           PhabricatorEventType::TYPE_DIFFERENTIAL_DIDEDITREVISION,
             array(
               'revision'      => $revision,
               'new'           => $is_new,
             ));
         $event->setUser($user);
         $event->setAphrontRequest($request);
         PhutilEventEngine::dispatchEvent($event);
 
         return id(new AphrontRedirectResponse())
           ->setURI('/D'.$revision->getID());
       }
     }
 
     $aux_phids = array();
     foreach ($aux_fields as $key => $aux_field) {
       $aux_phids[$key] = $aux_field->getRequiredHandlePHIDsForRevisionEdit();
     }
     $phids = array_mergev($aux_phids);
     $phids = array_unique($phids);
     $handles = $this->loadViewerHandles($phids);
     foreach ($aux_fields as $key => $aux_field) {
       $aux_field->setHandles(array_select_keys($handles, $aux_phids[$key]));
     }
 
     $form = new AphrontFormView();
     $form->setUser($request->getUser());
-    $form->setFlexible(true);
     if ($diff) {
       $form->addHiddenInput('diffID', $diff->getID());
     }
 
     if ($revision->getID()) {
       $form->setAction('/differential/revision/edit/'.$revision->getID().'/');
     } else {
       $form->setAction('/differential/revision/edit/');
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Form Errors'))
         ->setErrors($errors);
     }
 
     if ($diff && $revision->getID()) {
       $form
         ->appendChild(
           id(new AphrontFormTextAreaControl())
             ->setLabel(pht('Comments'))
             ->setName('comments')
             ->setCaption(pht("Explain what's new in this diff."))
             ->setValue($request->getStr('comments')))
         ->appendChild(
           id(new AphrontFormSubmitControl())
             ->setValue(pht('Save')))
         ->appendChild(
           id(new AphrontFormDividerControl()));
     }
 
     $preview = array();
     foreach ($aux_fields as $aux_field) {
       $control = $aux_field->renderEditControl();
       if ($control) {
         $form->appendChild($control);
       }
       $preview[] = $aux_field->renderEditPreview();
     }
 
     $submit = id(new AphrontFormSubmitControl())
       ->setValue('Save');
     if ($diff) {
       $submit->addCancelButton('/differential/diff/'.$diff->getID().'/');
     } else {
       $submit->addCancelButton('/D'.$revision->getID());
     }
 
     $form->appendChild($submit);
 
     $crumbs = $this->buildApplicationCrumbs();
     if ($revision->getID()) {
       if ($diff) {
         $title = pht('Update Differential Revision');
         $crumbs->addCrumb(
           id(new PhabricatorCrumbView())
             ->setName('D'.$revision->getID())
             ->setHref('/differential/diff/'.$diff->getID().'/'));
       } else {
         $title = pht('Edit Differential Revision');
         $crumbs->addCrumb(
           id(new PhabricatorCrumbView())
             ->setName('D'.$revision->getID())
             ->setHref('/D'.$revision->getID()));
       }
     } else {
       $title = pht('Create New Differential Revision');
     }
 
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($title));
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
         $error_view,
         $form,
         $preview),
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 
   private function loadAuxiliaryFields(DifferentialRevision $revision) {
 
     $user = $this->getRequest()->getUser();
 
     $aux_fields = DifferentialFieldSelector::newSelector()
       ->getFieldSpecifications();
     foreach ($aux_fields as $key => $aux_field) {
       $aux_field->setRevision($revision);
       if (!$aux_field->shouldAppearOnEdit()) {
         unset($aux_fields[$key]);
       } else {
         $aux_field->setUser($user);
       }
     }
 
     return DifferentialAuxiliaryField::loadFromStorage(
       $revision,
       $aux_fields);
   }
 
 }
diff --git a/src/applications/differential/view/DifferentialAddCommentView.php b/src/applications/differential/view/DifferentialAddCommentView.php
index 06e7200a0..b17a0f7ea 100644
--- a/src/applications/differential/view/DifferentialAddCommentView.php
+++ b/src/applications/differential/view/DifferentialAddCommentView.php
@@ -1,200 +1,200 @@
 <?php
 
 final class DifferentialAddCommentView extends AphrontView {
 
   private $revision;
   private $actions;
   private $actionURI;
   private $draft;
   private $auxFields;
   private $reviewers = array();
   private $ccs = array();
 
   public function setRevision($revision) {
     $this->revision = $revision;
     return $this;
   }
 
   public function setAuxFields(array $aux_fields) {
     assert_instances_of($aux_fields, 'DifferentialFieldSpecification');
     $this->auxFields = $aux_fields;
     return $this;
   }
 
   public function setActions(array $actions) {
     $this->actions = $actions;
     return $this;
   }
 
   public function setActionURI($uri) {
     $this->actionURI = $uri;
     return $this;
   }
 
   public function setDraft(PhabricatorDraft $draft = null) {
     $this->draft = $draft;
     return $this;
   }
 
   public function setReviewers(array $names) {
     $this->reviewers = $names;
     return $this;
   }
 
   public function setCCs(array $names) {
     $this->ccs = $names;
     return $this;
   }
 
   public function render() {
 
     require_celerity_resource('differential-revision-add-comment-css');
 
     $is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business');
 
     $revision = $this->revision;
 
     $action = null;
     if ($this->draft) {
       $action = idx($this->draft->getMetadata(), 'action');
     }
 
     $enable_reviewers = DifferentialAction::allowReviewers($action);
     $enable_ccs = ($action == DifferentialAction::ACTION_ADDCCS);
     $add_reviewers_labels = array(
       'add_reviewers' => pht('Add Reviewers'),
       'request_review' => pht('Add Reviewers'),
       'resign' => pht('Suggest Reviewers'),
     );
 
     $form = new AphrontFormView();
     $form
       ->setWorkflow(true)
-      ->setFlexible(true)
       ->setUser($this->user)
+      ->setShaded(true)
       ->setAction($this->actionURI)
       ->addHiddenInput('revision_id', $revision->getID())
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Action'))
           ->setName('action')
           ->setValue($action)
           ->setID('comment-action')
           ->setOptions($this->actions))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setLabel($enable_reviewers ? $add_reviewers_labels[$action] :
             $add_reviewers_labels['add_reviewers'])
           ->setName('reviewers')
           ->setControlID('add-reviewers')
           ->setControlStyle($enable_reviewers ? null : 'display: none')
           ->setID('add-reviewers-tokenizer')
           ->setDisableBehavior(true))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setLabel(pht('Add CCs'))
           ->setName('ccs')
           ->setControlID('add-ccs')
           ->setControlStyle($enable_ccs ? null : 'display: none')
           ->setID('add-ccs-tokenizer')
           ->setDisableBehavior(true))
       ->appendChild(
         id(new PhabricatorRemarkupControl())
           ->setName('comment')
           ->setID('comment-content')
           ->setLabel(pht('Comment'))
           ->setValue($this->draft ? $this->draft->getDraft() : null)
           ->setUser($this->user))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue($is_serious ? pht('Submit') : pht('Clowncopterize')));
 
     Javelin::initBehavior(
       'differential-add-reviewers-and-ccs',
       array(
         'dynamic' => array(
           'add-reviewers-tokenizer' => array(
             'actions' => array(
               'request_review' => 1,
               'add_reviewers' => 1,
               'resign' => 1,
             ),
             'src' => '/typeahead/common/users/',
             'value' => $this->reviewers,
             'row' => 'add-reviewers',
             'ondemand' => PhabricatorEnv::getEnvConfig('tokenizer.ondemand'),
             'labels' => $add_reviewers_labels,
             'placeholder' => pht('Type a user name...'),
           ),
           'add-ccs-tokenizer' => array(
             'actions' => array('add_ccs' => 1),
             'src' => '/typeahead/common/mailable/',
             'value' => $this->ccs,
             'row' => 'add-ccs',
             'ondemand' => PhabricatorEnv::getEnvConfig('tokenizer.ondemand'),
             'placeholder' => pht('Type a user or mailing list...'),
           ),
         ),
         'select' => 'comment-action',
       ));
 
     $diff = $revision->loadActiveDiff();
     $warnings = mpull($this->auxFields, 'renderWarningBoxForRevisionAccept');
 
     Javelin::initBehavior(
       'differential-accept-with-errors',
       array(
         'select' => 'comment-action',
         'warnings' => 'warnings',
       ));
 
     $rev_id = $revision->getID();
 
     Javelin::initBehavior(
       'differential-feedback-preview',
       array(
         'uri'       => '/differential/comment/preview/'.$rev_id.'/',
         'preview'   => 'comment-preview',
         'action'    => 'comment-action',
         'content'   => 'comment-content',
         'previewTokenizers' => array(
           'reviewers' => 'add-reviewers-tokenizer',
           'ccs'       => 'add-ccs-tokenizer',
         ),
 
         'inlineuri' => '/differential/comment/inline/preview/'.$rev_id.'/',
         'inline'    => 'inline-comment-preview',
       ));
 
     $warning_container = array();
     foreach ($warnings as $warning) {
       if ($warning) {
         $warning_container[] = $warning->render();
       }
     }
 
     $header = id(new PhabricatorHeaderView())
       ->setHeader($is_serious ? pht('Add Comment') : pht('Leap Into Action'));
 
     return hsprintf(
       '%s'.
       '<div class="differential-add-comment-panel">'.
         '%s%s%s'.
         '<div class="aphront-panel-preview aphront-panel-flush">'.
           '<div id="comment-preview">'.
             '<span class="aphront-panel-preview-loading-text">%s</span>'.
           '</div>'.
           '<div id="inline-comment-preview">'.
           '</div>'.
         '</div>'.
       '</div>',
       id(new PhabricatorAnchorView())
         ->setAnchorName('comment')
         ->setNavigationMarker(true)
         ->render(),
       $header->render(),
       $form->render(),
       phutil_tag('div', array('id' => 'warnings'), $warning_container),
       pht('Loading comment preview...'));
   }
 }
diff --git a/src/applications/diffusion/controller/DiffusionBrowseController.php b/src/applications/diffusion/controller/DiffusionBrowseController.php
index 7fac6961a..822b1c565 100644
--- a/src/applications/diffusion/controller/DiffusionBrowseController.php
+++ b/src/applications/diffusion/controller/DiffusionBrowseController.php
@@ -1,274 +1,273 @@
 <?php
 
 final class DiffusionBrowseController extends DiffusionController {
 
   public function processRequest() {
     $drequest = $this->diffusionRequest;
     $is_file = false;
 
     if ($this->getRequest()->getStr('before')) {
       $is_file = true;
     } else if ($this->getRequest()->getStr('grep') == '') {
       $results = DiffusionBrowseResultSet::newFromConduit(
         $this->callConduitWithDiffusionRequest(
           'diffusion.browsequery',
           array(
             'path' => $drequest->getPath(),
             'commit' => $drequest->getCommit(),
           )));
       $reason = $results->getReasonForEmptyResultSet();
       $is_file = ($reason == DiffusionBrowseResultSet::REASON_IS_FILE);
     }
 
     if ($is_file) {
       $controller = new DiffusionBrowseFileController($this->getRequest());
       $controller->setDiffusionRequest($drequest);
       $controller->setCurrentApplication($this->getCurrentApplication());
       return $this->delegateToController($controller);
     }
 
     $content = array();
 
     if ($drequest->getTagContent()) {
       $title = pht('Tag: %s', $drequest->getSymbolicCommit());
 
       $tag_view = new AphrontPanelView();
       $tag_view->setHeader($title);
       $tag_view->appendChild(
         $this->markupText($drequest->getTagContent()));
 
       $content[] = $tag_view;
     }
 
     $content[] = $this->renderSearchForm();
 
     if ($this->getRequest()->getStr('grep') != '') {
       $content[] = $this->renderSearchResults();
 
     } else {
       if (!$results->isValidResults()) {
         $empty_result = new DiffusionEmptyResultView();
         $empty_result->setDiffusionRequest($drequest);
         $empty_result->setDiffusionBrowseResultSet($results);
         $empty_result->setView($this->getRequest()->getStr('view'));
         $content[] = $empty_result;
 
       } else {
 
         $phids = array();
         foreach ($results->getPaths() as $result) {
           $data = $result->getLastCommitData();
           if ($data) {
             if ($data->getCommitDetail('authorPHID')) {
               $phids[$data->getCommitDetail('authorPHID')] = true;
             }
           }
         }
 
         $phids = array_keys($phids);
         $handles = $this->loadViewerHandles($phids);
 
         $browse_table = new DiffusionBrowseTableView();
         $browse_table->setDiffusionRequest($drequest);
         $browse_table->setHandles($handles);
         $browse_table->setPaths($results->getPaths());
         $browse_table->setUser($this->getRequest()->getUser());
 
         $browse_panel = new AphrontPanelView();
         $browse_panel->appendChild($browse_table);
         $browse_panel->setNoBackground();
 
         $content[] = $browse_panel;
       }
 
       $content[] = $this->buildOpenRevisions();
 
       $readme = $this->callConduitWithDiffusionRequest(
         'diffusion.readmequery',
         array(
           'paths' => $results->getPathDicts(),
         ));
       if ($readme) {
         $box = new PHUIBoxView();
         $box->setShadow(true);
         $box->appendChild($readme);
         $box->addPadding(PHUI::PADDING_LARGE);
         $box->addMargin(PHUI::MARGIN_LARGE);
 
         $header = id(new PhabricatorHeaderView())
           ->setHeader(pht('README'));
 
         $content[] = array(
           $header,
           $box,
         );
       }
 
     }
 
     $nav = $this->buildSideNav('browse', false);
     $nav->appendChild($content);
 
     $crumbs = $this->buildCrumbs(
       array(
         'branch' => true,
         'path'   => true,
         'view'   => 'browse',
       ));
     $nav->setCrumbs($crumbs);
     return $this->buildApplicationPage(
       $nav,
       array(
         'device' => true,
         'title' => array(
           nonempty(basename($drequest->getPath()), '/'),
           $drequest->getRepository()->getCallsign().' Repository',
         ),
       ));
   }
 
 
   private function renderSearchForm() {
     $drequest = $this->getDiffusionRequest();
     $form = id(new AphrontFormView())
       ->setUser($this->getRequest()->getUser())
-      ->setMethod('GET')
-      ->setNoShading(true);
+      ->setMethod('GET');
 
     switch ($drequest->getRepository()->getVersionControlSystem()) {
       case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
         $form->appendChild(pht('Search is not available in Subversion.'));
         break;
 
       default:
         $form
           ->appendChild(
             id(new AphrontFormTextControl())
               ->setLabel(pht('Search Here'))
               ->setName('grep')
               ->setValue($this->getRequest()->getStr('grep'))
               ->setCaption(pht('Regular expression')))
           ->appendChild(
             id(new AphrontFormSubmitControl())
               ->setValue(pht('Grep')));
         break;
     }
 
     $filter = new AphrontListFilterView();
     $filter->appendChild($form);
 
     return $filter;
   }
 
   private function renderSearchResults() {
     $drequest = $this->getDiffusionRequest();
     $repository = $drequest->getRepository();
     $results = array();
     $no_data = pht('No results found.');
 
     $limit = 100;
     $page = $this->getRequest()->getInt('page', 0);
     $pager = new AphrontPagerView();
     $pager->setPageSize($limit);
     $pager->setOffset($page);
     $pager->setURI($this->getRequest()->getRequestURI(), 'page');
 
     try {
 
       $results = $this->callConduitWithDiffusionRequest(
         'diffusion.searchquery',
         array(
           'grep' => $this->getRequest()->getStr('grep'),
           'stableCommitName' => $drequest->getStableCommitName(),
           'path' => $drequest->getPath(),
           'limit' => $limit + 1,
           'offset' => $page));
 
     } catch (ConduitException $ex) {
       $err = $ex->getErrorDescription();
       if ($err != '') {
         return id(new AphrontErrorView())
           ->setTitle(pht('Search Error'))
           ->appendChild($err);
       }
     }
 
     $results = $pager->sliceResults($results);
 
     require_celerity_resource('syntax-highlighting-css');
 
     // NOTE: This can be wrong because we may find the string inside the
     // comment. But it's correct in most cases and highlighting the whole file
     // would be too expensive.
     $futures = array();
     $engine = PhabricatorSyntaxHighlighter::newEngine();
     foreach ($results as $result) {
       list($path, $line, $string) = $result;
       $futures["{$path}:{$line}"] = $engine->getHighlightFuture(
         $engine->getLanguageFromFilename($path),
         ltrim($string));
     }
 
     try {
       Futures($futures)->limit(8)->resolveAll();
     } catch (PhutilSyntaxHighlighterException $ex) {
     }
 
     $rows = array();
     foreach ($results as $result) {
       list($path, $line, $string) = $result;
 
       $href = $drequest->generateURI(array(
         'action' => 'browse',
         'path' => $path,
         'line' => $line,
       ));
 
       try {
         $string = $futures["{$path}:{$line}"]->resolve();
       } catch (PhutilSyntaxHighlighterException $ex) {
       }
 
       $string = phutil_tag(
         'pre',
         array('class' => 'PhabricatorMonospaced'),
         $string);
 
       $path = Filesystem::readablePath($path, $drequest->getPath());
 
       $rows[] = array(
         phutil_tag('a', array('href' => $href), $path),
         $line,
         $string,
       );
     }
 
     $table = id(new AphrontTableView($rows))
       ->setClassName('remarkup-code')
       ->setHeaders(array(pht('Path'), pht('Line'), pht('String')))
       ->setColumnClasses(array('', 'n', 'wide'))
       ->setNoDataString($no_data);
 
     return id(new AphrontPanelView())
       ->setHeader(pht('Search Results'))
       ->appendChild($table)
       ->appendChild($pager);
   }
 
 
   private function markupText($text) {
     $engine = PhabricatorMarkupEngine::newDiffusionMarkupEngine();
     $engine->setConfig('viewer', $this->getRequest()->getUser());
     $text = $engine->markupText($text);
 
     $text = phutil_tag(
       'div',
       array(
         'class' => 'phabricator-remarkup',
       ),
       $text);
 
     return $text;
   }
 
 }
diff --git a/src/applications/diffusion/controller/DiffusionCommitEditController.php b/src/applications/diffusion/controller/DiffusionCommitEditController.php
index c798cc89f..52471ed69 100644
--- a/src/applications/diffusion/controller/DiffusionCommitEditController.php
+++ b/src/applications/diffusion/controller/DiffusionCommitEditController.php
@@ -1,99 +1,98 @@
 <?php
 
 final class DiffusionCommitEditController extends DiffusionController {
 
   public function willProcessRequest(array $data) {
     $data['user'] = $this->getRequest()->getUser();
     $this->diffusionRequest = DiffusionRequest::newFromDictionary($data);
   }
 
   public function processRequest() {
 
     $request    = $this->getRequest();
     $user       = $request->getUser();
     $drequest   = $this->getDiffusionRequest();
     $callsign   = $drequest->getRepository()->getCallsign();
     $repository = $drequest->getRepository();
     $commit     = $drequest->loadCommit();
     $page_title = pht('Edit Diffusion Commit');
 
     if (!$commit) {
       return new Aphront404Response();
     }
 
     $commit_phid        = $commit->getPHID();
     $edge_type          = PhabricatorEdgeConfig::TYPE_COMMIT_HAS_PROJECT;
     $current_proj_phids = PhabricatorEdgeQuery::loadDestinationPHIDs(
       $commit_phid,
       $edge_type);
     $handles = $this->loadViewerHandles($current_proj_phids);
     $proj_t_values = mpull($handles, 'getFullName', 'getPHID');
 
     if ($request->isFormPost()) {
       $proj_phids = $request->getArr('projects');
       $new_proj_phids = array_values($proj_phids);
       $rem_proj_phids = array_diff($current_proj_phids,
                                    $new_proj_phids);
       $editor         = id(new PhabricatorEdgeEditor());
       $editor->setActor($user);
       foreach ($rem_proj_phids as $phid) {
         $editor->removeEdge($commit_phid, $edge_type, $phid);
       }
       foreach ($new_proj_phids as $phid) {
         $editor->addEdge($commit_phid, $edge_type, $phid);
       }
       $editor->save();
 
       id(new PhabricatorSearchIndexer())
         ->indexDocumentByPHID($commit->getPHID());
 
       return id(new AphrontRedirectResponse())
       ->setURI('/r'.$callsign.$commit->getCommitIdentifier());
     }
 
     $tokenizer_id = celerity_generate_unique_node_id();
     $form         = id(new AphrontFormView())
       ->setUser($user)
       ->setAction($request->getRequestURI()->getPath())
-      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormTokenizerControl())
         ->setLabel(pht('Projects'))
         ->setName('projects')
         ->setValue($proj_t_values)
         ->setID($tokenizer_id)
         ->setCaption(
           javelin_tag(
             'a',
             array(
               'href'        => '/project/create/',
               'mustcapture' => true,
               'sigil'       => 'project-create',
             ),
             pht('Create New Project')))
         ->setDatasource('/typeahead/common/projects/'));;
 
     Javelin::initBehavior('project-create', array(
       'tokenizerID' => $tokenizer_id,
     ));
 
     $submit = id(new AphrontFormSubmitControl())
       ->setValue(pht('Save'))
       ->addCancelButton('/r'.$callsign.$commit->getCommitIdentifier());
     $form->appendChild($submit);
 
     $header = new PhabricatorHeaderView();
     $header->setHeader(pht('Edit Diffusion Commit'));
 
     return $this->buildApplicationPage(
       array(
         $header,
         $form,
       ),
       array(
         'title' => $page_title,
         'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditBasicController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditBasicController.php
index 3bce3b276..ef4507995 100644
--- a/src/applications/diffusion/controller/DiffusionRepositoryEditBasicController.php
+++ b/src/applications/diffusion/controller/DiffusionRepositoryEditBasicController.php
@@ -1,132 +1,131 @@
 <?php
 
 final class DiffusionRepositoryEditBasicController extends DiffusionController {
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
     $drequest = $this->diffusionRequest;
     $repository = $drequest->getRepository();
 
     $repository = id(new PhabricatorRepositoryQuery())
       ->setViewer($user)
       ->requireCapabilities(
         array(
           PhabricatorPolicyCapability::CAN_VIEW,
           PhabricatorPolicyCapability::CAN_EDIT,
         ))
       ->withIDs(array($repository->getID()))
       ->executeOne();
 
     if (!$repository) {
       return new Aphront404Response();
     }
 
     $edit_uri = $this->getRepositoryControllerURI($repository, 'edit/');
 
     $v_name = $repository->getName();
     $v_desc = $repository->getDetail('description');
     $e_name = true;
     $errors = array();
 
     if ($request->isFormPost()) {
       $v_name = $request->getStr('name');
       $v_desc = $request->getStr('description');
 
       if (!strlen($v_name)) {
         $e_name = pht('Required');
         $errors[] = pht('Repository name is required.');
       } else {
         $e_name = null;
       }
 
       if (!$errors) {
         $xactions = array();
         $template = id(new PhabricatorRepositoryTransaction());
 
         $type_name = PhabricatorRepositoryTransaction::TYPE_NAME;
         $type_desc = PhabricatorRepositoryTransaction::TYPE_DESCRIPTION;
 
         $xactions[] = id(clone $template)
           ->setTransactionType($type_name)
           ->setNewValue($v_name);
 
         $xactions[] = id(clone $template)
           ->setTransactionType($type_desc)
           ->setNewValue($v_desc);
 
         id(new PhabricatorRepositoryEditor())
           ->setContinueOnNoEffect(true)
           ->setContentSourceFromRequest($request)
           ->setActor($user)
           ->applyTransactions($repository, $xactions);
 
         return id(new AphrontRedirectResponse())->setURI($edit_uri);
       }
     }
 
     $content = array();
 
     $crumbs = $this->buildCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName(pht('Edit Basics')));
     $content[] = $crumbs;
 
     $title = pht('Edit %s', $repository->getName());
 
     if ($errors) {
       $content[] = id(new AphrontErrorView())
         ->setTitle(pht('Form Errors'))
         ->setErrors($errors);
     }
 
     $form = id(new AphrontFormView())
       ->setUser($user)
-      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setName('name')
           ->setLabel(pht('Name'))
           ->setValue($v_name)
           ->setError($e_name))
       ->appendChild(
         id(new PhabricatorRemarkupControl())
           ->setName('description')
           ->setLabel(pht('Description'))
           ->setValue($v_desc))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Save'))
           ->addCancelButton($edit_uri))
       ->appendChild(id(new PHUIFormDividerControl()))
       ->appendRemarkupInstructions($this->getReadmeInstructions());
 
     $content[] = $form;
 
     return $this->buildApplicationPage(
       $content,
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 
   private function getReadmeInstructions() {
     return pht(<<<EOTEXT
 You can also create a `README` file at the repository root (or in any
 subdirectory) to provide information about the repository. These formats are
 supported:
 
 | File Name       | Rendered As... |
 |-----------------|----------------|
 | `README`          | Plain Text |
 | `README.txt`      | Plain Text |
 | `README.remarkup` | Remarkup |
 | `README.md`       | Remarkup |
 | `README.rainbow`  | \xC2\xA1Fiesta! |
 EOTEXT
 );
   }
 
 }
diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php
index 56d044104..ec9bf7a78 100644
--- a/src/applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php
+++ b/src/applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php
@@ -1,119 +1,118 @@
 <?php
 
 final class DiffusionRepositoryEditEncodingController
   extends DiffusionController {
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
     $drequest = $this->diffusionRequest;
     $repository = $drequest->getRepository();
 
     $repository = id(new PhabricatorRepositoryQuery())
       ->setViewer($user)
       ->requireCapabilities(
         array(
           PhabricatorPolicyCapability::CAN_VIEW,
           PhabricatorPolicyCapability::CAN_EDIT,
         ))
       ->withIDs(array($repository->getID()))
       ->executeOne();
 
     if (!$repository) {
       return new Aphront404Response();
     }
 
     $edit_uri = $this->getRepositoryControllerURI($repository, 'edit/');
 
     $v_encoding = $repository->getDetail('encoding');
     $e_encoding = null;
     $errors = array();
 
     if ($request->isFormPost()) {
       $v_encoding = $request->getStr('encoding');
 
       if (!$errors) {
         $xactions = array();
         $template = id(new PhabricatorRepositoryTransaction());
 
         $type_encoding = PhabricatorRepositoryTransaction::TYPE_ENCODING;
 
         $xactions[] = id(clone $template)
           ->setTransactionType($type_encoding)
           ->setNewValue($v_encoding);
 
         try {
           id(new PhabricatorRepositoryEditor())
             ->setContinueOnNoEffect(true)
             ->setContentSourceFromRequest($request)
             ->setActor($user)
             ->applyTransactions($repository, $xactions);
 
           return id(new AphrontRedirectResponse())->setURI($edit_uri);
         } catch (Exception $ex) {
           $errors[] = $ex->getMessage();
         }
       }
     }
 
     $content = array();
 
     $crumbs = $this->buildCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName(pht('Edit Encoding')));
     $content[] = $crumbs;
 
     $title = pht('Edit %s', $repository->getName());
 
     if ($errors) {
       $content[] = id(new AphrontErrorView())
         ->setTitle(pht('Form Errors'))
         ->setErrors($errors);
     }
 
     $form = id(new AphrontFormView())
       ->setUser($user)
-      ->setFlexible(true)
       ->appendRemarkupInstructions($this->getEncodingInstructions())
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setName('encoding')
           ->setLabel(pht('Text Encoding'))
           ->setValue($v_encoding)
           ->setError($e_encoding))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Save Encoding'))
           ->addCancelButton($edit_uri));
 
     $content[] = $form;
 
     return $this->buildApplicationPage(
       $content,
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 
   private function getEncodingInstructions() {
     return pht(<<<EOT
 If source code in this repository uses a character encoding other than UTF-8
 (for example, `ISO-8859-1`), specify it here.
 
 **Normally, you can leave this field blank.** If your source code is written in
 ASCII or UTF-8, everything will work correctly.
 
 Source files will be translated from the specified encoding to UTF-8 when they
 are read from the repository, before they are displayed in Diffusion.
 
 See [[%s | UTF-8 and Character Encoding]] for more information on how
 Phabricator handles text encodings.
 EOT
     ,
     PhabricatorEnv::getDoclink(
       'article/User_Guide_UTF-8_and_Character_Encoding.html'));
   }
 
 }
diff --git a/src/applications/files/controller/PhabricatorFileUploadController.php b/src/applications/files/controller/PhabricatorFileUploadController.php
index d78a09327..010bd6a3c 100644
--- a/src/applications/files/controller/PhabricatorFileUploadController.php
+++ b/src/applications/files/controller/PhabricatorFileUploadController.php
@@ -1,119 +1,117 @@
 <?php
 
 final class PhabricatorFileUploadController extends PhabricatorFileController {
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $e_file = true;
     $errors = array();
     if ($request->isFormPost()) {
       if (!$request->getFileExists('file')) {
         $e_file = pht('Required');
         $errors[] = pht('You must select a file to upload.');
       } else {
         $file = PhabricatorFile::newFromPHPUpload(
           idx($_FILES, 'file'),
           array(
             'name'        => $request->getStr('name'),
             'authorPHID'  => $user->getPHID(),
             'isExplicitUpload' => true,
           ));
       }
 
       if (!$errors) {
         return id(new AphrontRedirectResponse())->setURI($file->getViewURI());
       }
     }
 
     $support_id = celerity_generate_unique_node_id();
     $instructions = id(new AphrontFormMarkupControl())
       ->setControlID($support_id)
       ->setControlStyle('display: none')
       ->setValue(hsprintf(
         '<br /><br /><strong>%s</strong> %s<br /><br />',
         pht('Drag and Drop:'),
         pht(
           'You can also upload files by dragging and dropping them from your '.
           'desktop onto this page or the Phabricator home page.')));
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->setEncType('multipart/form-data')
       ->appendChild(
         id(new AphrontFormFileControl())
           ->setLabel(pht('File'))
           ->setName('file')
           ->setError($e_file)
           ->setCaption($this->renderUploadLimit()))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Name'))
           ->setName('name')
           ->setValue($request->getStr('name'))
           ->setCaption(pht('Optional file display name.')))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Upload'))
           ->addCancelButton('/file/'))
       ->appendChild($instructions);
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName(pht('Upload'))
         ->setHref($request->getRequestURI()));
 
     $title = pht('Upload File');
 
     if ($errors) {
       $errors = id(new AphrontErrorView())
         ->setTitle(pht('Form Errors'))
         ->setErrors($errors);
     }
 
     $global_upload = id(new PhabricatorGlobalUploadTargetView())
       ->setShowIfSupportedID($support_id);
 
-    $panel = new AphrontPanelView();
-    $panel->setHeader(pht('New File Upload'));
-    $panel->setNoBackground();
-    $panel->appendChild($form);
-    $panel->setWidth(AphrontPanelView::WIDTH_FORM);
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($title)
+      ->setFormError($errors)
+      ->setForm($form);
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $errors,
-        $panel,
+        $form_box,
         $global_upload,
       ),
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 
   private function renderUploadLimit() {
     $limit = PhabricatorEnv::getEnvConfig('storage.upload-size-limit');
     $limit = phabricator_parse_bytes($limit);
     if ($limit) {
       $formatted = phabricator_format_bytes($limit);
       return 'Maximum file size: '.$formatted;
     }
 
     $doc_href = PhabricatorEnv::getDocLink(
       'article/Configuring_File_Upload_Limits.html');
     $doc_link = phutil_tag(
       'a',
       array(
         'href'    => $doc_href,
         'target'  => '_blank',
       ),
       'Configuring File Upload Limits');
 
     return hsprintf('Upload limit is not configured, see %s.', $doc_link);
   }
 
 }
diff --git a/src/applications/flag/controller/PhabricatorFlagEditController.php b/src/applications/flag/controller/PhabricatorFlagEditController.php
index 110d82b2b..e9f56bf12 100644
--- a/src/applications/flag/controller/PhabricatorFlagEditController.php
+++ b/src/applications/flag/controller/PhabricatorFlagEditController.php
@@ -1,90 +1,90 @@
 <?php
 
 final class PhabricatorFlagEditController extends PhabricatorFlagController {
 
   private $phid;
 
   public function willProcessRequest(array $data) {
     $this->phid = $data['phid'];
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $phid = $this->phid;
     $handle = PhabricatorObjectHandleData::loadOneHandle($phid, $user);
 
     if (!$handle->isComplete()) {
       return new Aphront404Response();
     }
 
     $flag = PhabricatorFlagQuery::loadUserFlag($user, $phid);
 
     if (!$flag) {
       $flag = new PhabricatorFlag();
       $flag->setOwnerPHID($user->getPHID());
       $flag->setType($handle->getType());
       $flag->setObjectPHID($handle->getPHID());
       $flag->setReasonPHID($user->getPHID());
     }
 
     if ($request->isDialogFormPost()) {
       $flag->setColor($request->getInt('color'));
       $flag->setNote($request->getStr('note'));
       $flag->save();
 
       return id(new AphrontReloadResponse())->setURI('/flag/');
     }
 
     $type_name = $handle->getTypeName();
 
     $dialog = new AphrontDialogView();
     $dialog->setUser($user);
 
     $dialog->setTitle(pht("Flag %s", $type_name));
 
     require_celerity_resource('phabricator-flag-css');
 
-    $form = new AphrontFormLayoutView();
+    $form = new PHUIFormLayoutView();
 
     $is_new = !$flag->getID();
 
     if ($is_new) {
       $form
         ->appendChild(hsprintf(
           "<p>%s</p><br />",
           pht('You can flag this %s if you want to remember to look '.
             'at it later.',
             $type_name)));
     }
 
     $radio = new AphrontFormRadioButtonControl();
     foreach (PhabricatorFlagColor::getColorNameMap() as $color => $text) {
       $class = 'phabricator-flag-radio phabricator-flag-color-'.$color;
       $radio->addButton($color, $text, '', $class);
     }
 
     $form
       ->appendChild(
         $radio
           ->setName('color')
           ->setLabel(pht('Flag Color'))
           ->setValue($flag->getColor()))
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_SHORT)
           ->setName('note')
           ->setLabel(pht('Note'))
           ->setValue($flag->getNote()));
 
     $dialog->appendChild($form);
 
     $dialog->addCancelButton($handle->getURI());
     $dialog->addSubmitButton(
       $is_new ? pht("Create Flag") : pht('Save'));
 
     return id(new AphrontDialogResponse())->setDialog($dialog);
   }
 
 }
diff --git a/src/applications/herald/controller/HeraldDeleteController.php b/src/applications/herald/controller/HeraldDeleteController.php
index 47fb85784..3abc9dc1e 100644
--- a/src/applications/herald/controller/HeraldDeleteController.php
+++ b/src/applications/herald/controller/HeraldDeleteController.php
@@ -1,58 +1,57 @@
 <?php
 
 final class HeraldDeleteController extends HeraldController {
 
   private $id;
 
   public function getFilter() {
     // note this controller is only used from a dialog-context at the moment
     // and there is actually no "delete" filter
     return 'delete';
   }
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
   }
 
   public function processRequest() {
 
     $rule = id(new HeraldRule())->load($this->id);
     if (!$rule) {
       return new Aphront404Response();
     }
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     // Anyone can delete a global rule, but only the rule owner can delete a
     // personal one.
     if ($rule->getRuleType() == HeraldRuleTypeConfig::RULE_TYPE_PERSONAL) {
       if ($user->getPHID() != $rule->getAuthorPHID()) {
         return new Aphront400Response();
       }
     }
 
     if ($request->isFormPost()) {
       $rule->openTransaction();
         $rule->logEdit($user->getPHID(), 'delete');
         $rule->delete();
       $rule->saveTransaction();
       return id(new AphrontReloadResponse())->setURI('/herald/');
     }
 
     $dialog = new AphrontDialogView();
     $dialog->setUser($request->getUser());
     $dialog->setTitle(pht('Really delete this rule?'));
-    $dialog->setHeaderColor(PhabricatorActionHeaderView::HEADER_RED);
     $dialog->appendChild(pht(
       "Are you sure you want to delete the rule: %s?",
       $rule->getName()));
     $dialog->addSubmitButton(pht('Delete'));
     $dialog->addCancelButton('/herald/');
     $dialog->setSubmitURI($request->getPath());
 
     return id(new AphrontDialogResponse())->setDialog($dialog);
 
   }
 
 }
diff --git a/src/applications/herald/controller/HeraldNewController.php b/src/applications/herald/controller/HeraldNewController.php
index 2cb59ee91..c14a929ed 100644
--- a/src/applications/herald/controller/HeraldNewController.php
+++ b/src/applications/herald/controller/HeraldNewController.php
@@ -1,90 +1,93 @@
 <?php
 
 final class HeraldNewController extends HeraldController {
 
   private $contentType;
   private $ruleType;
 
   public function willProcessRequest(array $data) {
     $this->contentType = idx($data, 'type');
     $this->ruleType = idx($data, 'rule_type');
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $content_type_map = HeraldAdapter::getEnabledAdapterMap();
     if (empty($content_type_map[$this->contentType])) {
       $this->contentType = head_key($content_type_map);
     }
 
     $rule_type_map = HeraldRuleTypeConfig::getRuleTypeMap();
     if (empty($rule_type_map[$this->ruleType])) {
       $this->ruleType = HeraldRuleTypeConfig::RULE_TYPE_PERSONAL;
     }
 
     // Reorder array to put "personal" first.
     $rule_type_map = array_select_keys(
       $rule_type_map,
       array(
         HeraldRuleTypeConfig::RULE_TYPE_PERSONAL,
       )) + $rule_type_map;
 
     $captions = array(
       HeraldRuleTypeConfig::RULE_TYPE_PERSONAL =>
         pht('Personal rules notify you about events. You own them, but '.
         'they can only affect you.'),
       HeraldRuleTypeConfig::RULE_TYPE_GLOBAL =>
         pht('Global rules notify anyone about events. No one owns them, and '.
         'anyone can edit them. Usually, Global rules are used to notify '.
         'mailing lists.'),
     );
 
     $radio = id(new AphrontFormRadioButtonControl())
       ->setLabel(pht('Type'))
       ->setName('rule_type')
       ->setValue($this->ruleType);
 
     foreach ($rule_type_map as $value => $name) {
       $radio->addButton(
         $value,
         $name,
         idx($captions, $value));
     }
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->setAction('/herald/edit/')
-      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('New Rule for'))
           ->setName('content_type')
           ->setValue($this->contentType)
           ->setOptions($content_type_map))
       ->appendChild($radio)
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Create Rule'))
           ->addCancelButton($this->getApplicationURI()));
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Create Herald Rule'))
+      ->setForm($form);
+
     $crumbs = $this
       ->buildApplicationCrumbs()
       ->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht('Create Rule')));
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $form,
+        $form_box,
       ),
       array(
         'title' => pht('Create Herald Rule'),
         'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/herald/controller/HeraldRuleController.php b/src/applications/herald/controller/HeraldRuleController.php
index e4c31e764..51edfa98d 100644
--- a/src/applications/herald/controller/HeraldRuleController.php
+++ b/src/applications/herald/controller/HeraldRuleController.php
@@ -1,538 +1,542 @@
 <?php
 
 final class HeraldRuleController extends HeraldController {
 
   private $id;
   private $filter;
 
   public function willProcessRequest(array $data) {
     $this->id = (int)idx($data, 'id');
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $content_type_map = HeraldAdapter::getEnabledAdapterMap();
     $rule_type_map = HeraldRuleTypeConfig::getRuleTypeMap();
 
     if ($this->id) {
       $id = $this->id;
       $rule = id(new HeraldRuleQuery())
         ->setViewer($user)
         ->withIDs(array($id))
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_VIEW,
             PhabricatorPolicyCapability::CAN_EDIT,
           ))
         ->executeOne();
       if (!$rule) {
         return new Aphront404Response();
       }
       $cancel_uri = $this->getApplicationURI("rule/{$id}/");
     } else {
       $rule = new HeraldRule();
       $rule->setAuthorPHID($user->getPHID());
       $rule->setMustMatchAll(true);
 
       $content_type = $request->getStr('content_type');
       $rule->setContentType($content_type);
 
       $rule_type = $request->getStr('rule_type');
       if (!isset($rule_type_map[$rule_type])) {
         $rule_type = HeraldRuleTypeConfig::RULE_TYPE_GLOBAL;
       }
       $rule->setRuleType($rule_type);
 
       $cancel_uri = $this->getApplicationURI();
     }
 
     $adapter = HeraldAdapter::getAdapterForContentType($rule->getContentType());
 
     $local_version = id(new HeraldRule())->getConfigVersion();
     if ($rule->getConfigVersion() > $local_version) {
       throw new Exception(
         "This rule was created with a newer version of Herald. You can not ".
         "view or edit it in this older version. Upgrade your Phabricator ".
         "deployment.");
     }
 
     // Upgrade rule version to our version, since we might add newly-defined
     // conditions, etc.
     $rule->setConfigVersion($local_version);
 
     $rule_conditions = $rule->loadConditions();
     $rule_actions = $rule->loadActions();
 
     $rule->attachConditions($rule_conditions);
     $rule->attachActions($rule_actions);
 
     $e_name = true;
     $errors = array();
     if ($request->isFormPost() && $request->getStr('save')) {
       list($e_name, $errors) = $this->saveRule($adapter, $rule, $request);
       if (!$errors) {
         $id = $rule->getID();
         $uri = $this->getApplicationURI("rule/{$id}/");
         return id(new AphrontRedirectResponse())->setURI($uri);
       }
     }
 
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setTitle(pht('Form Errors'));
       $error_view->setErrors($errors);
     } else {
       $error_view = null;
     }
 
     $must_match_selector = $this->renderMustMatchSelector($rule);
     $repetition_selector = $this->renderRepetitionSelector($rule, $adapter);
 
     $handles = $this->loadHandlesForRule($rule);
 
     require_celerity_resource('herald-css');
 
     $content_type_name = $content_type_map[$rule->getContentType()];
     $rule_type_name = $rule_type_map[$rule->getRuleType()];
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->setID('herald-rule-edit-form')
       ->addHiddenInput('content_type', $rule->getContentType())
       ->addHiddenInput('rule_type', $rule->getRuleType())
       ->addHiddenInput('save', 1)
       ->appendChild(
         // Build this explicitly (instead of using addHiddenInput())
         // so we can add a sigil to it.
         javelin_tag(
           'input',
           array(
             'type'  => 'hidden',
             'name'  => 'rule',
             'sigil' => 'rule',
           )))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Rule Name'))
           ->setName('name')
           ->setError($e_name)
           ->setValue($rule->getName()));
 
     $form
       ->appendChild(
         id(new AphrontFormMarkupControl())
           ->setValue(pht(
             "This %s rule triggers for %s.",
             phutil_tag('strong', array(), $rule_type_name),
             phutil_tag('strong', array(), $content_type_name))))
       ->appendChild(
         id(new AphrontFormInsetView())
           ->setTitle(pht('Conditions'))
           ->setRightButton(javelin_tag(
             'a',
             array(
               'href' => '#',
               'class' => 'button green',
               'sigil' => 'create-condition',
               'mustcapture' => true
             ),
             pht('New Condition')))
           ->setDescription(
             pht('When %s these conditions are met:', $must_match_selector))
           ->setContent(javelin_tag(
             'table',
             array(
               'sigil' => 'rule-conditions',
               'class' => 'herald-condition-table'
             ),
             '')))
       ->appendChild(
         id(new AphrontFormInsetView())
           ->setTitle(pht('Action'))
           ->setRightButton(javelin_tag(
             'a',
             array(
               'href' => '#',
               'class' => 'button green',
               'sigil' => 'create-action',
               'mustcapture' => true,
             ),
             pht('New Action')))
           ->setDescription(pht(
             'Take these actions %s this rule matches:',
             $repetition_selector))
           ->setContent(javelin_tag(
               'table',
               array(
                 'sigil' => 'rule-actions',
                 'class' => 'herald-action-table',
               ),
               '')))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Save Rule'))
           ->addCancelButton($cancel_uri));
 
     $this->setupEditorBehavior($rule, $handles, $adapter);
 
     $title = $rule->getID()
         ? pht('Edit Herald Rule')
         : pht('Create Herald Rule');
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($title)
+      ->setFormError($error_view)
+      ->setForm($form);
+
     $crumbs = $this
       ->buildApplicationCrumbs()
       ->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName($title));
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $error_view,
-        $form,
+        $form_box,
       ),
       array(
         'title' => pht('Edit Rule'),
         'device' => true,
       ));
   }
 
   private function saveRule(HeraldAdapter $adapter, $rule, $request) {
     $rule->setName($request->getStr('name'));
     $rule->setMustMatchAll(($request->getStr('must_match') == 'all'));
 
     $repetition_policy_param = $request->getStr('repetition_policy');
     $rule->setRepetitionPolicy(
       HeraldRepetitionPolicyConfig::toInt($repetition_policy_param));
 
     $e_name = true;
     $errors = array();
 
     if (!strlen($rule->getName())) {
       $e_name = pht("Required");
       $errors[] = pht("Rule must have a name.");
     }
 
     $data = json_decode($request->getStr('rule'), true);
     if (!is_array($data) ||
         !$data['conditions'] ||
         !$data['actions']) {
       throw new Exception("Failed to decode rule data.");
     }
 
     $conditions = array();
     foreach ($data['conditions'] as $condition) {
       if ($condition === null) {
         // We manage this as a sparse array on the client, so may receive
         // NULL if conditions have been removed.
         continue;
       }
 
       $obj = new HeraldCondition();
       $obj->setFieldName($condition[0]);
       $obj->setFieldCondition($condition[1]);
 
       if (is_array($condition[2])) {
         $obj->setValue(array_keys($condition[2]));
       } else {
         $obj->setValue($condition[2]);
       }
 
       try {
         $adapter->willSaveCondition($obj);
       } catch (HeraldInvalidConditionException $ex) {
         $errors[] = $ex->getMessage();
       }
 
       $conditions[] = $obj;
     }
 
     $actions = array();
     foreach ($data['actions'] as $action) {
       if ($action === null) {
         // Sparse on the client; removals can give us NULLs.
         continue;
       }
 
       if (!isset($action[1])) {
         // Legitimate for any action which doesn't need a target, like
         // "Do nothing".
         $action[1] = null;
       }
 
       $obj = new HeraldAction();
       $obj->setAction($action[0]);
       $obj->setTarget($action[1]);
 
       try {
         $adapter->willSaveAction($rule, $obj);
       } catch (HeraldInvalidActionException $ex) {
         $errors[] = $ex;
       }
 
       $actions[] = $obj;
     }
 
     $rule->attachConditions($conditions);
     $rule->attachActions($actions);
 
     if (!$errors) {
       try {
 
         $edit_action = $rule->getID() ? 'edit' : 'create';
 
         $rule->openTransaction();
           $rule->save();
           $rule->saveConditions($conditions);
           $rule->saveActions($actions);
           $rule->logEdit($request->getUser()->getPHID(), $edit_action);
         $rule->saveTransaction();
 
       } catch (AphrontQueryDuplicateKeyException $ex) {
         $e_name = pht("Not Unique");
         $errors[] = pht("Rule name is not unique. Choose a unique name.");
       }
     }
 
     return array($e_name, $errors);
   }
 
   private function setupEditorBehavior(
     HeraldRule $rule,
     array $handles,
     HeraldAdapter $adapter) {
 
     $serial_conditions = array(
       array('default', 'default', ''),
     );
 
     if ($rule->getConditions()) {
       $serial_conditions = array();
       foreach ($rule->getConditions() as $condition) {
 
         $value = $condition->getValue();
         if (is_array($value)) {
           $value_map = array();
           foreach ($value as $k => $fbid) {
             $value_map[$fbid] = $handles[$fbid]->getName();
           }
           $value = $value_map;
         }
 
         $serial_conditions[] = array(
           $condition->getFieldName(),
           $condition->getFieldCondition(),
           $value,
         );
       }
     }
 
     $serial_actions = array(
       array('default', ''),
     );
     if ($rule->getActions()) {
       $serial_actions = array();
       foreach ($rule->getActions() as $action) {
 
         switch ($action->getAction()) {
           case HeraldAdapter::ACTION_FLAG:
             $current_value = $action->getTarget();
             break;
           default:
             $target_map = array();
             foreach ((array)$action->getTarget() as $fbid) {
               $target_map[$fbid] = $handles[$fbid]->getName();
             }
             $current_value = $target_map;
             break;
         }
 
         $serial_actions[] = array(
           $action->getAction(),
           $current_value,
         );
       }
     }
 
     $all_rules = $this->loadRulesThisRuleMayDependUpon($rule);
     $all_rules = mpull($all_rules, 'getName', 'getID');
     asort($all_rules);
 
     $all_fields = $adapter->getFieldNameMap();
     $all_conditions = $adapter->getConditionNameMap();
     $all_actions = $adapter->getActionNameMap($rule->getRuleType());
 
     $fields = $adapter->getFields();
     $field_map = array_select_keys($all_fields, $fields);
 
     $actions = $adapter->getActions($rule->getRuleType());
     $action_map = array_select_keys($all_actions, $actions);
 
     $config_info = array();
     $config_info['fields'] = $field_map;
     $config_info['conditions'] = $all_conditions;
     $config_info['actions'] = $action_map;
 
     foreach ($config_info['fields'] as $field => $name) {
       $field_conditions = $adapter->getConditionsForField($field);
       $config_info['conditionMap'][$field] = $field_conditions;
     }
 
     foreach ($config_info['fields'] as $field => $fname) {
       foreach ($config_info['conditionMap'][$field] as $condition) {
         $value_type = $adapter->getValueTypeForFieldAndCondition(
           $field,
           $condition);
         $config_info['values'][$field][$condition] = $value_type;
       }
     }
 
     $config_info['rule_type'] = $rule->getRuleType();
 
     foreach ($config_info['actions'] as $action => $name) {
       $config_info['targets'][$action] = $adapter->getValueTypeForAction(
         $action,
        $rule->getRuleType());
     }
 
     Javelin::initBehavior(
       'herald-rule-editor',
       array(
         'root' => 'herald-rule-edit-form',
         'conditions' => (object)$serial_conditions,
         'actions' => (object)$serial_actions,
         'template' => $this->buildTokenizerTemplates() + array(
           'rules' => $all_rules,
           'colors' => PhabricatorFlagColor::getColorNameMap(),
           'defaultColor' => PhabricatorFlagColor::COLOR_BLUE,
         ),
         'author' => array($rule->getAuthorPHID() =>
                           $handles[$rule->getAuthorPHID()]->getName()),
         'info' => $config_info,
       ));
   }
 
   private function loadHandlesForRule($rule) {
     $phids = array();
 
     foreach ($rule->getActions() as $action) {
       if (!is_array($action->getTarget())) {
         continue;
       }
       foreach ($action->getTarget() as $target) {
         $target = (array)$target;
         foreach ($target as $phid) {
           $phids[] = $phid;
         }
       }
     }
 
     foreach ($rule->getConditions() as $condition) {
       $value = $condition->getValue();
       if (is_array($value)) {
         foreach ($value as $phid) {
           $phids[] = $phid;
         }
       }
     }
 
     $phids[] = $rule->getAuthorPHID();
 
     return $this->loadViewerHandles($phids);
   }
 
 
   /**
    * Render the selector for the "When (all of | any of) these conditions are
    * met:" element.
    */
   private function renderMustMatchSelector($rule) {
     return AphrontFormSelectControl::renderSelectTag(
       $rule->getMustMatchAll() ? 'all' : 'any',
       array(
         'all' => pht('all of'),
         'any' => pht('any of'),
       ),
       array(
         'name' => 'must_match',
       ));
   }
 
 
   /**
    * Render the selector for "Take these actions (every time | only the first
    * time) this rule matches..." element.
    */
   private function renderRepetitionSelector($rule, HeraldAdapter $adapter) {
     $repetition_policy = HeraldRepetitionPolicyConfig::toString(
       $rule->getRepetitionPolicy());
 
     $repetition_options = $adapter->getRepetitionOptions();
     $repetition_names = HeraldRepetitionPolicyConfig::getMap();
     $repetition_map = array_select_keys($repetition_names, $repetition_options);
 
     if (count($repetition_map) < 2) {
       return head($repetition_names);
     } else {
       return AphrontFormSelectControl::renderSelectTag(
         $repetition_policy,
         $repetition_map,
         array(
           'name' => 'repetition_policy',
         ));
     }
   }
 
 
   protected function buildTokenizerTemplates() {
     $template = new AphrontTokenizerTemplateView();
     $template = $template->render();
 
     return array(
       'source' => array(
         'email'       => '/typeahead/common/mailable/',
         'user'        => '/typeahead/common/users/',
         'repository'  => '/typeahead/common/repositories/',
         'package'     => '/typeahead/common/packages/',
         'project'     => '/typeahead/common/projects/',
       ),
       'markup' => $template,
     );
   }
 
 
   /**
    * Load rules for the "Another Herald rule..." condition dropdown, which
    * allows one rule to depend upon the success or failure of another rule.
    */
   private function loadRulesThisRuleMayDependUpon(HeraldRule $rule) {
     $viewer = $this->getRequest()->getUser();
 
     // Any rule can depend on a global rule.
     $all_rules = id(new HeraldRuleQuery())
       ->setViewer($viewer)
       ->withRuleTypes(array(HeraldRuleTypeConfig::RULE_TYPE_GLOBAL))
       ->withContentTypes(array($rule->getContentType()))
       ->execute();
 
     if ($rule->getRuleType() == HeraldRuleTypeConfig::RULE_TYPE_PERSONAL) {
       // Personal rules may depend upon your other personal rules.
       $all_rules += id(new HeraldRuleQuery())
         ->setViewer($viewer)
         ->withRuleTypes(array(HeraldRuleTypeConfig::RULE_TYPE_PERSONAL))
         ->withContentTypes(array($rule->getContentType()))
         ->withAuthorPHIDs(array($rule->getAuthorPHID()))
         ->execute();
     }
 
     // A rule can not depend upon itself.
     unset($all_rules[$rule->getID()]);
 
     return $all_rules;
   }
 
 
 }
diff --git a/src/applications/legalpad/controller/LegalpadDocumentEditController.php b/src/applications/legalpad/controller/LegalpadDocumentEditController.php
index ed686aaf3..df03f9db8 100644
--- a/src/applications/legalpad/controller/LegalpadDocumentEditController.php
+++ b/src/applications/legalpad/controller/LegalpadDocumentEditController.php
@@ -1,195 +1,198 @@
 <?php
 
 /**
  * @group legalpad
  */
 final class LegalpadDocumentEditController extends LegalpadController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     if (!$this->id) {
       $is_create = true;
 
       $document = id(new LegalpadDocument())
         ->setVersions(0)
         ->setCreatorPHID($user->getPHID())
         ->setContributorCount(0)
         ->setRecentContributorPHIDs(array())
         ->setViewPolicy(PhabricatorPolicies::POLICY_USER)
         ->setEditPolicy(PhabricatorPolicies::POLICY_USER);
       $body = id(new LegalpadDocumentBody())
         ->setCreatorPHID($user->getPHID());
       $document->attachDocumentBody($body);
       $document->setDocumentBodyPHID(PhabricatorPHIDConstants::PHID_VOID);
       $title = null;
       $text = null;
     } else {
       $is_create = false;
 
       $document = id(new LegalpadDocumentQuery())
         ->setViewer($user)
         ->needDocumentBodies(true)
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_VIEW,
             PhabricatorPolicyCapability::CAN_EDIT,
           ))
         ->withIDs(array($this->id))
         ->executeOne();
       if (!$document) {
         return new Aphront404Response();
       }
       $title = $document->getDocumentBody()->getTitle();
       $text = $document->getDocumentBody()->getText();
     }
 
     $e_title = true;
     $e_text = true;
     $errors = array();
     $can_view = null;
     $can_edit = null;
     if ($request->isFormPost()) {
 
       $xactions = array();
 
       $title = $request->getStr('title');
       if (!strlen($title)) {
         $e_title = pht('Required');
         $errors[] = pht('The document title may not be blank.');
       } else {
         $xactions[] = id(new LegalpadTransaction())
           ->setTransactionType(LegalpadTransactionType::TYPE_TITLE)
           ->setNewValue($title);
       }
 
       $text = $request->getStr('text');
       if (!strlen($text)) {
         $e_text = pht('Required');
         $errors[] = pht('The document may not be blank.');
       } else {
         $xactions[] = id(new LegalpadTransaction())
           ->setTransactionType(LegalpadTransactionType::TYPE_TEXT)
           ->setNewValue($text);
       }
 
       $can_view = $request->getStr('can_view');
       $xactions[] = id(new LegalpadTransaction())
         ->setTransactionType(PhabricatorTransactions::TYPE_VIEW_POLICY)
         ->setNewValue($can_view);
       $can_edit = $request->getStr('can_edit');
       $xactions[] = id(new LegalpadTransaction())
         ->setTransactionType(PhabricatorTransactions::TYPE_EDIT_POLICY)
         ->setNewValue($can_edit);
 
       if (!$errors) {
         $editor = id(new LegalpadDocumentEditor())
           ->setContentSourceFromRequest($request)
           ->setContinueOnNoEffect(true)
           ->setActor($user);
 
         $xactions = $editor->applyTransactions($document, $xactions);
 
         return id(new AphrontRedirectResponse())
           ->setURI($this->getApplicationURI('view/'.$document->getID()));
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('A Fatal Omission!'))
         ->setErrors($errors);
       // set these to what was specified in the form on post
       $document->setViewPolicy($can_view);
       $document->setEditPolicy($can_edit);
     }
 
     $form = id(new AphrontFormView())
-      ->setFlexible(true)
       ->setUser($user)
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setID('document-title')
         ->setLabel(pht('Title'))
         ->setError($e_title)
         ->setValue($title)
         ->setName('title'))
       ->appendChild(
         id(new PhabricatorRemarkupControl())
         ->setID('document-text')
         ->setLabel(pht('Text'))
         ->setError($e_text)
         ->setValue($text)
         ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_TALL)
         ->setName('text'));
 
     $policies = id(new PhabricatorPolicyQuery())
       ->setViewer($user)
       ->setObject($document)
       ->execute();
 
     $form
       ->appendChild(
         id(new AphrontFormPolicyControl())
         ->setUser($user)
         ->setCapability(PhabricatorPolicyCapability::CAN_VIEW)
         ->setPolicyObject($document)
         ->setPolicies($policies)
         ->setName('can_view'))
       ->appendChild(
         id(new AphrontFormPolicyControl())
         ->setUser($user)
         ->setCapability(PhabricatorPolicyCapability::CAN_EDIT)
         ->setPolicyObject($document)
         ->setPolicies($policies)
         ->setName('can_edit'));
 
     $submit = new AphrontFormSubmitControl();
     if ($is_create) {
       $submit->setValue(pht('Create Document'));
       $title = pht('Create Document');
       $short = pht('Create');
     } else {
       $submit->setValue(pht('Update Document'));
       $submit->addCancelButton(
           $this->getApplicationURI('view/'.$document->getID()));
       $title = pht('Update Document');
       $short = pht('Update');
     }
 
     $form
       ->appendChild($submit);
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($title)
+      ->setFormError($error_view)
+      ->setForm($form);
+
     $crumbs = $this->buildApplicationCrumbs($this->buildSideNav());
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())->setName($short));
 
 
     $preview = id(new PHUIRemarkupPreviewPanel())
       ->setHeader(pht('Document Preview'))
       ->setPreviewURI($this->getApplicationURI('document/preview/'))
       ->setControlID('document-text')
       ->setSkin('document');
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $error_view,
-        $form,
+        $form_box,
         $preview
       ),
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/legalpad/controller/LegalpadDocumentSignController.php b/src/applications/legalpad/controller/LegalpadDocumentSignController.php
index 946e4fb5a..59be4de1d 100644
--- a/src/applications/legalpad/controller/LegalpadDocumentSignController.php
+++ b/src/applications/legalpad/controller/LegalpadDocumentSignController.php
@@ -1,235 +1,234 @@
 <?php
 
 /**
  * @group legalpad
  */
 final class LegalpadDocumentSignController extends LegalpadController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $document = id(new LegalpadDocumentQuery())
       ->setViewer($user)
       ->withIDs(array($this->id))
       ->needDocumentBodies(true)
       ->executeOne();
 
     if (!$document) {
       return new Aphront404Response();
     }
 
     $signature = id(new LegalpadDocumentSignature())
       ->loadOneWhere(
         'documentPHID = %s AND documentVersion = %d AND signerPHID = %s',
         $document->getPHID(),
         $document->getVersions(),
         $user->getPHID());
 
     if (!$signature) {
       $has_signed = false;
       $error_view = null;
       $signature = id(new LegalpadDocumentSignature())
         ->setSignerPHID($user->getPHID())
         ->setDocumentPHID($document->getPHID())
         ->setDocumentVersion($document->getVersions());
       $data = array(
         'name' => $user->getRealName(),
         'email' => $user->loadPrimaryEmailAddress());
       $signature->setSignatureData($data);
     } else {
       $has_signed = true;
       $error_view = id(new AphrontErrorView())
         ->setSeverity(AphrontErrorView::SEVERITY_NOTICE)
         ->setTitle(pht('You have already agreed to these terms.'));
       $data = $signature->getSignatureData();
     }
 
     $e_name = true;
     $e_email = true;
     $e_address_1 = true;
     $errors = array();
     if ($request->isFormPost()) {
       $name = $request->getStr('name');
       $email = $request->getStr('email');
       $address_1 = $request->getStr('address_1');
       $address_2 = $request->getStr('address_2');
       $phone = $request->getStr('phone');
       $agree = $request->getExists('agree');
 
       if (!$name) {
         $e_name = pht('Required');
         $errors[] = pht('Name field is required.');
       }
       $data['name'] = $name;
 
       if (!$email) {
         $e_email = pht('Required');
         $errors[] = pht('Email field is required.');
       } else {
         $addr_obj = new PhutilEmailAddress($email);
         $domain = $addr_obj->getDomainName();
         if (!$domain) {
           $e_email = pht('Invalid');
           $errors[] = pht('A valid email is required.');
         }
       }
       $data['email'] = $email;
 
       if (!$address_1) {
         $e_address_1 = pht('Required');
         $errors[] = pht('Address line 1 field is required.');
       }
       $data['address_1'] = $address_1;
       $data['address_2'] = $address_2;
       $data['phone'] = $phone;
       $signature->setSignatureData($data);
 
       if (!$agree) {
         $errors[] = pht(
           'You must check "I agree to the terms laid forth above."');
       }
 
       if (!$errors) {
         $signature->save();
         $has_signed = true;
         $error_view = id(new AphrontErrorView())
           ->setSeverity(AphrontErrorView::SEVERITY_NOTICE)
           ->setTitle(pht('Signature successful. Thank you.'));
       } else {
         $error_view = id(new AphrontErrorView())
           ->setTitle(pht('Error in submission.'))
           ->setErrors($errors);
       }
     }
 
     $document_body = $document->getDocumentBody();
     $engine = id(new PhabricatorMarkupEngine())
       ->setViewer($user);
     $engine->addObject(
       $document_body,
       LegalpadDocumentBody::MARKUP_FIELD_TEXT);
     $engine->process();
 
     $title = $document_body->getTitle();
 
     $header = id(new PhabricatorHeaderView())
       ->setHeader($title);
 
     $content = array(
       id(new PHUIDocumentView())
       ->setHeader($header)
       ->appendChild($this->buildDocument($engine, $document_body)),
       $error_view,
       $this->buildSignatureForm(
         $document_body,
         $signature,
         $has_signed,
         $e_name,
         $e_email,
         $e_address_1));
 
     return $this->buildApplicationPage(
       $content,
       array(
         'title' => $title,
         'device' => true,
         'pageObjects' => array($document->getPHID()),
       ));
   }
 
   private function buildDocument(
     PhabricatorMarkupEngine
     $engine, LegalpadDocumentBody $body) {
 
     require_celerity_resource('legalpad-documentbody-css');
 
     return phutil_tag(
       'div',
       array(
         'class' => 'legalpad-documentbody'
       ),
       $engine->getOutput($body, LegalpadDocumentBody::MARKUP_FIELD_TEXT));
 
   }
 
   private function buildSignatureForm(
     LegalpadDocumentBody $body,
     LegalpadDocumentSignature $signature,
     $has_signed = false,
     $e_name = true,
     $e_email = true,
     $e_address_1 = true) {
 
     $user = $this->getRequest()->getUser();
     if ($has_signed) {
       $instructions = pht('Thank you for signing and agreeing.');
     } else {
       $instructions = pht('Please enter the following information.');
     }
 
     $data = $signature->getSignatureData();
     $form = id(new AphrontFormView())
       ->setUser($user)
-      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormInsetView())
         ->setTitle(pht('Sign and Agree'))
         ->setDescription($instructions)
         ->setContent(phutil_tag('br', array()))
         ->appendChild(
           id(new AphrontFormTextControl())
           ->setLabel(pht('Name'))
           ->setValue(idx($data, 'name', ''))
           ->setName('name')
           ->setError($e_name)
           ->setDisabled($has_signed))
         ->appendChild(
           id(new AphrontFormTextControl())
           ->setLabel(pht('Email'))
           ->setValue(idx($data, 'email', ''))
           ->setName('email')
           ->setError($e_email)
           ->setDisabled($has_signed))
         ->appendChild(
           id(new AphrontFormTextControl())
           ->setLabel(pht('Address line 1'))
           ->setValue(idx($data, 'address_1', ''))
           ->setName('address_1')
           ->setError($e_address_1)
           ->setDisabled($has_signed))
         ->appendChild(
           id(new AphrontFormTextControl())
           ->setLabel(pht('Address line 2'))
           ->setValue(idx($data, 'address_2', ''))
           ->setName('address_2')
           ->setDisabled($has_signed))
         ->appendChild(
           id(new AphrontFormTextControl())
           ->setLabel(pht('Phone'))
           ->setValue(idx($data, 'phone', ''))
           ->setName('phone')
           ->setDisabled($has_signed))
         ->appendChild(
           id(new AphrontFormCheckboxControl())
           ->addCheckbox(
             'agree',
             'agree',
             pht('I agree to the terms laid forth above.'),
             $has_signed)
           ->setDisabled($has_signed))
         ->appendChild(
           id(new AphrontFormSubmitControl())
           ->setValue(pht('Sign and Agree'))
           ->setDisabled($has_signed)));
 
     return $form;
   }
 
 }
diff --git a/src/applications/macro/controller/PhabricatorMacroEditController.php b/src/applications/macro/controller/PhabricatorMacroEditController.php
index 9e78339e8..50267bcc5 100644
--- a/src/applications/macro/controller/PhabricatorMacroEditController.php
+++ b/src/applications/macro/controller/PhabricatorMacroEditController.php
@@ -1,278 +1,280 @@
 <?php
 
 final class PhabricatorMacroEditController
   extends PhabricatorMacroController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     if ($this->id) {
       $macro = id(new PhabricatorMacroQuery())
         ->setViewer($user)
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_VIEW,
             PhabricatorPolicyCapability::CAN_EDIT,
           ))
         ->withIDs(array($this->id))
         ->executeOne();
       if (!$macro) {
         return new Aphront404Response();
       }
     } else {
       $macro = new PhabricatorFileImageMacro();
       $macro->setAuthorPHID($user->getPHID());
     }
 
     $errors = array();
     $e_name = true;
     $e_file = null;
     $file = null;
     $can_fetch = PhabricatorEnv::getEnvConfig('security.allow-outbound-http');
 
     if ($request->isFormPost()) {
       $original = clone $macro;
 
       $new_name = null;
       if ($request->getBool('name_form') || !$macro->getID()) {
         $new_name = $request->getStr('name');
 
         $macro->setName($new_name);
 
         if (!strlen($macro->getName())) {
           $errors[] = pht('Macro name is required.');
           $e_name = pht('Required');
         } else if (!preg_match('/^[a-z0-9:_-]{3,}$/', $macro->getName())) {
           $errors[] = pht(
             'Macro must be at least three characters long and contain only '.
             'lowercase letters, digits, hyphens, colons and underscores.');
           $e_name = pht('Invalid');
         } else {
           $e_name = null;
         }
       }
 
       $file = null;
       if ($request->getFileExists('file')) {
         $file = PhabricatorFile::newFromPHPUpload(
           $_FILES['file'],
           array(
             'name' => $request->getStr('name'),
             'authorPHID' => $user->getPHID(),
           ));
       } else if ($request->getStr('url')) {
         try {
           $file = PhabricatorFile::newFromFileDownload(
             $request->getStr('url'),
             array(
               'name' => $request->getStr('name'),
               'authorPHID' => $user->getPHID(),
             ));
         } catch (Exception $ex) {
           $errors[] = pht('Could not fetch URL: %s', $ex->getMessage());
         }
       } else if ($request->getStr('phid')) {
         $file = id(new PhabricatorFile())->loadOneWhere(
           'phid = %s',
           $request->getStr('phid'));
       }
 
       if ($file) {
         if (!$file->isViewableInBrowser()) {
           $errors[] = pht('You must upload an image.');
           $e_file = pht('Invalid');
         } else {
           $macro->setFilePHID($file->getPHID());
           $macro->attachFile($file);
           $e_file = null;
         }
       }
 
       if (!$macro->getID() && !$file) {
         $errors[] = pht('You must upload an image to create a macro.');
         $e_file = pht('Required');
       }
 
       if (!$errors) {
         try {
           $xactions = array();
 
           if ($new_name !== null) {
             $xactions[] = id(new PhabricatorMacroTransaction())
               ->setTransactionType(PhabricatorMacroTransactionType::TYPE_NAME)
               ->setNewValue($new_name);
           }
 
           if ($file) {
             $xactions[] = id(new PhabricatorMacroTransaction())
               ->setTransactionType(PhabricatorMacroTransactionType::TYPE_FILE)
               ->setNewValue($file->getPHID());
           }
 
           $editor = id(new PhabricatorMacroEditor())
             ->setActor($user)
             ->setContinueOnNoEffect(true)
             ->setContentSourceFromRequest($request);
 
           $xactions = $editor->applyTransactions($original, $xactions);
 
           $view_uri = $this->getApplicationURI('/view/'.$original->getID().'/');
           return id(new AphrontRedirectResponse())->setURI($view_uri);
         } catch (AphrontQueryDuplicateKeyException $ex) {
           throw $ex;
           $errors[] = pht('Macro name is not unique!');
           $e_name = pht('Duplicate');
         }
       }
     }
 
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setTitle(pht('Form Errors'));
       $error_view->setErrors($errors);
     } else {
       $error_view = null;
     }
 
     $current_file = null;
     if ($macro->getFilePHID()) {
       $current_file = $macro->getFile();
     }
 
     $form = new AphrontFormView();
     $form->addHiddenInput('name_form', 1);
     $form->setUser($request->getUser());
 
     $form
       ->setEncType('multipart/form-data')
-      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Name'))
           ->setName('name')
           ->setValue($macro->getName())
           ->setCaption(
             pht('This word or phrase will be replaced with the image.'))
           ->setError($e_name));
 
     if (!$macro->getID()) {
       if ($current_file) {
         $current_file_view = id(new PhabricatorFileLinkView())
           ->setFilePHID($current_file->getPHID())
           ->setFileName($current_file->getName())
           ->setFileViewable(true)
           ->setFileViewURI($current_file->getBestURI())
           ->render();
         $form->addHiddenInput('phid', $current_file->getPHID());
         $form->appendChild(
           id(new AphrontFormMarkupControl())
             ->setLabel(pht('Selected File'))
             ->setValue($current_file_view));
 
         $other_label = pht('Change File');
       } else {
         $other_label = pht('File');
       }
 
       if ($can_fetch) {
         $form->appendChild(
           id(new AphrontFormTextControl())
             ->setLabel(pht('URL'))
             ->setName('url')
             ->setValue($request->getStr('url'))
             ->setError($request->getFileExists('file') ? false : $e_file));
       }
 
       $form->appendChild(
         id(new AphrontFormFileControl())
           ->setLabel($other_label)
           ->setName('file')
           ->setError($request->getStr('url') ? false : $e_file));
     }
 
 
     $view_uri = $this->getApplicationURI('/view/'.$macro->getID().'/');
 
     if ($macro->getID()) {
       $cancel_uri = $view_uri;
     } else {
       $cancel_uri = $this->getApplicationURI();
     }
 
     $form
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Save Image Macro'))
           ->addCancelButton($cancel_uri));
 
     $crumbs = $this->buildApplicationCrumbs();
 
     if ($macro->getID()) {
       $title = pht('Edit Image Macro');
       $crumb = pht('Edit Macro');
 
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setHref($view_uri)
           ->setName(pht('Macro "%s"', $macro->getName())));
     } else {
       $title = pht('Create Image Macro');
       $crumb = pht('Create Macro');
     }
 
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setHref($request->getRequestURI())
         ->setName($crumb));
 
     $upload = null;
     if ($macro->getID()) {
       $upload_header = id(new PhabricatorHeaderView())
         ->setHeader(pht('Upload New File'));
 
       $upload_form = id(new AphrontFormView())
-        ->setFlexible(true)
         ->setEncType('multipart/form-data')
         ->setUser($request->getUser());
 
       if ($can_fetch) {
         $upload_form->appendChild(
           id(new AphrontFormTextControl())
             ->setLabel(pht('URL'))
             ->setName('url')
             ->setValue($request->getStr('url')));
       }
 
       $upload_form
         ->appendChild(
           id(new AphrontFormFileControl())
             ->setLabel(pht('File'))
             ->setName('file'))
         ->appendChild(
           id(new AphrontFormSubmitControl())
             ->setValue(pht('Upload File')));
 
       $upload = array($upload_header, $upload_form);
     }
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($title)
+      ->setFormError($error_view)
+      ->setForm($form);
+
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $error_view,
-        $form,
+        $form_box,
         $upload,
       ),
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 }
diff --git a/src/applications/macro/controller/PhabricatorMacroMemeDialogController.php b/src/applications/macro/controller/PhabricatorMacroMemeDialogController.php
index 970cee1a6..4fd9259bb 100644
--- a/src/applications/macro/controller/PhabricatorMacroMemeDialogController.php
+++ b/src/applications/macro/controller/PhabricatorMacroMemeDialogController.php
@@ -1,75 +1,75 @@
 <?php
 
 final class PhabricatorMacroMemeDialogController
   extends PhabricatorMacroController {
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $name = $request->getStr('macro');
     $above = $request->getStr('above');
     $below = $request->getStr('below');
 
     $e_macro = true;
     $errors = array();
     if ($request->isDialogFormPost()) {
       if (!$name) {
         $e_macro = pht('Required');
         $errors[] = pht('Macro name is required.');
       } else {
         $macro = id(new PhabricatorMacroQuery())
           ->setViewer($user)
           ->withNames(array($name))
           ->executeOne();
         if (!$macro) {
           $e_macro = pht('Invalid');
           $errors[] = pht('No such macro.');
         }
       }
 
       if (!$errors) {
         $options = new PhutilSimpleOptions();
         $data = array(
           'src' => $name,
           'above' => $above,
           'below' => $below,
         );
         $string = $options->unparse($data, $escape = '}');
 
         $result = array(
           'text' => "{meme, {$string}}",
         );
         return id(new AphrontAjaxResponse())->setContent($result);
       }
     }
 
-    $view = id(new AphrontFormLayoutView())
+    $view = id(new PHUIFormLayoutView())
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Macro'))
           ->setName('macro')
           ->setValue($name)
           ->setError($e_macro))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Above'))
           ->setName('above')
           ->setValue($above))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Below'))
           ->setName('below')
           ->setValue($below));
 
     $dialog = id(new AphrontDialogView())
       ->setUser($user)
       ->setTitle(pht('Create Meme'))
       ->appendChild($view)
       ->addCancelButton('/')
       ->addSubmitButton(pht('rofllolo!!~'));
 
     return id(new AphrontDialogResponse())->setDialog($dialog);
   }
 
 }
diff --git a/src/applications/mailinglists/controller/PhabricatorMailingListsEditController.php b/src/applications/mailinglists/controller/PhabricatorMailingListsEditController.php
index ef346d086..c7397306b 100644
--- a/src/applications/mailinglists/controller/PhabricatorMailingListsEditController.php
+++ b/src/applications/mailinglists/controller/PhabricatorMailingListsEditController.php
@@ -1,139 +1,145 @@
 <?php
 
 final class PhabricatorMailingListsEditController
   extends PhabricatorMailingListsController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $viewer = $request->getUser();
 
     if ($this->id) {
+      $page_title = pht('Edit Mailing List');
       $list = id(new PhabricatorMailingListQuery())
         ->setViewer($viewer)
         ->withIDs(array($this->id))
         ->executeOne();
       if (!$list) {
         return new Aphront404Response();
       }
     } else {
+      $page_title = pht('Create Mailing List');
       $list = new PhabricatorMetaMTAMailingList();
     }
 
     $e_email = true;
     $e_uri = null;
     $e_name = true;
     $errors = array();
 
     $crumbs = $this->buildApplicationCrumbs();
 
     if ($request->isFormPost()) {
       $list->setName($request->getStr('name'));
       $list->setEmail($request->getStr('email'));
       $list->setURI($request->getStr('uri'));
 
       $e_email = null;
       $e_name = null;
 
       if (!strlen($list->getEmail())) {
         $e_email = pht('Required');
         $errors[] = pht('Email is required.');
       }
 
       if (!strlen($list->getName())) {
         $e_name = pht('Required');
         $errors[] = pht('Name is required.');
       } else if (preg_match('/[ ,]/', $list->getName())) {
         $e_name = pht('Invalid');
         $errors[] = pht('Name must not contain spaces or commas.');
       }
 
       if ($list->getURI()) {
         if (!PhabricatorEnv::isValidWebResource($list->getURI())) {
           $e_uri = pht('Invalid');
           $errors[] = pht('Mailing list URI must point to a valid web page.');
         }
       }
 
       if (!$errors) {
         try {
           $list->save();
           return id(new AphrontRedirectResponse())
             ->setURI($this->getApplicationURI());
         } catch (AphrontQueryDuplicateKeyException $ex) {
           $e_email = pht('Duplicate');
           $errors[] = pht('Another mailing list already uses that address.');
         }
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Form Errors'))
         ->setErrors($errors);
     }
 
     $form = new AphrontFormView();
     $form->setUser($request->getUser());
     if ($list->getID()) {
       $form->setAction($this->getApplicationURI('/edit/'.$list->getID().'/'));
     } else {
       $form->setAction($this->getApplicationURI('/edit/'));
     }
 
     $form
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Email'))
           ->setName('email')
           ->setValue($list->getEmail())
           ->setCaption(pht('Email will be delivered to this address.'))
           ->setError($e_email))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Name'))
           ->setName('name')
           ->setError($e_name)
           ->setCaption(pht('Human-readable display and autocomplete name.'))
           ->setValue($list->getName()))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('URI'))
           ->setName('uri')
           ->setError($e_uri)
           ->setCaption(pht('Optional link to mailing list archives or info.'))
           ->setValue($list->getURI()))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Save'))
           ->addCancelButton($this->getApplicationURI()));
 
     if ($list->getID()) {
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht('Edit Mailing List')));
     } else {
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht('Create Mailing List')));
     }
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($page_title)
+      ->setFormError($error_view)
+      ->setForm($form);
+
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $error_view,
-        $form,
+        $form_box,
       ),
       array(
-        'title' => pht('Edit Mailing List'),
+        'title' => $page_title,
         'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/maniphest/controller/ManiphestExportController.php b/src/applications/maniphest/controller/ManiphestExportController.php
index e1ea54c96..effb2220d 100644
--- a/src/applications/maniphest/controller/ManiphestExportController.php
+++ b/src/applications/maniphest/controller/ManiphestExportController.php
@@ -1,130 +1,130 @@
 <?php
 
 /**
  * @group maniphest
  */
 final class ManiphestExportController extends ManiphestController {
 
   private $key;
 
   public function willProcessRequest(array $data) {
     $this->key = $data['key'];
     return $this;
   }
 
   /**
    * @phutil-external-symbol class PHPExcel
    * @phutil-external-symbol class PHPExcel_IOFactory
    * @phutil-external-symbol class PHPExcel_Style_NumberFormat
    * @phutil-external-symbol class PHPExcel_Cell_DataType
    */
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $ok = @include_once 'PHPExcel.php';
     if (!$ok) {
       $dialog = new AphrontDialogView();
       $dialog->setUser($user);
 
       $inst1 = pht(
         'This system does not have PHPExcel installed. This software '.
         'component is required to export tasks to Excel. Have your system '.
         'administrator install it from:');
 
       $inst2 = pht(
         'Your PHP "include_path" needs to be updated to include the '.
         'PHPExcel Classes directory.');
 
       $dialog->setTitle(pht('Excel Export Not Configured'));
       $dialog->appendChild(hsprintf(
         '<p>%s</p>'.
         '<br />'.
         '<p>'.
           '<a href="http://www.phpexcel.net/">http://www.phpexcel.net/</a>'.
         '</p>'.
         '<br />'.
         '<p>%s</p>',
         $inst1,
         $inst2));
 
       $dialog->addCancelButton('/maniphest/');
       return id(new AphrontDialogResponse())->setDialog($dialog);
     }
 
     // TODO: PHPExcel has a dependency on the PHP zip extension. We should test
     // for that here, since it fatals if we don't have the ZipArchive class.
 
     $query = id(new PhabricatorSearchQuery())->loadOneWhere(
       'queryKey = %s',
       $this->key);
     if (!$query) {
       return new Aphront404Response();
     }
 
     $formats = ManiphestExcelFormat::loadAllFormats();
     $export_formats = array();
     foreach ($formats as $format_class => $format_object) {
       $export_formats[$format_class] = $format_object->getName();
     }
 
     if (!$request->isDialogFormPost()) {
       $dialog = new AphrontDialogView();
       $dialog->setUser($user);
 
       $dialog->setTitle(pht('Export Tasks to Excel'));
       $dialog->appendChild(phutil_tag('p', array(), pht(
         'Do you want to export the query results to Excel?')));
 
-      $form = id(new AphrontFormLayoutView())
+      $form = id(new PHUIFormLayoutView())
         ->appendChild(
           id(new AphrontFormSelectControl())
             ->setLabel(pht('Format:'))
             ->setName("excel-format")
             ->setOptions($export_formats));
 
       $dialog->appendChild($form);
 
       $dialog->addCancelButton('/maniphest/');
       $dialog->addSubmitButton(pht('Export to Excel'));
       return id(new AphrontDialogResponse())->setDialog($dialog);
 
     }
 
     $format = idx($formats, $request->getStr("excel-format"));
     if ($format === null) {
       throw new Exception('Excel format object not found.');
     }
 
     $query->setParameter('limit',   null);
     $query->setParameter('offset',  null);
     $query->setParameter('order',   'p');
     $query->setParameter('group',   'n');
 
     list($tasks, $handles) = ManiphestTaskListController::loadTasks(
       $query,
       $user);
     // Ungroup tasks.
     $tasks = array_mergev($tasks);
 
     $all_projects = array_mergev(mpull($tasks, 'getProjectPHIDs'));
     $project_handles = $this->loadViewerHandles($all_projects);
     $handles += $project_handles;
 
     $workbook = new PHPExcel();
     $format->buildWorkbook($workbook, $tasks, $handles, $user);
     $writer = PHPExcel_IOFactory::createWriter($workbook, 'Excel2007');
 
     ob_start();
     $writer->save('php://output');
     $data = ob_get_clean();
 
     $mime = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
 
     return id(new AphrontFileResponse())
       ->setMimeType($mime)
       ->setDownload($format->getFileName().'.xlsx')
       ->setContent($data);
   }
 
 }
diff --git a/src/applications/maniphest/controller/ManiphestTaskDetailController.php b/src/applications/maniphest/controller/ManiphestTaskDetailController.php
index 1029f2655..9bbef0209 100644
--- a/src/applications/maniphest/controller/ManiphestTaskDetailController.php
+++ b/src/applications/maniphest/controller/ManiphestTaskDetailController.php
@@ -1,605 +1,606 @@
 <?php
 
 /**
  * @group maniphest
  */
 final class ManiphestTaskDetailController extends ManiphestController {
 
   private $id;
 
   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 ManiphestTask())->load($this->id);
     if (!$task) {
       return new Aphront404Response();
     }
 
     $workflow = $request->getStr('workflow');
     $parent_task = null;
     if ($workflow && is_numeric($workflow)) {
       $parent_task = id(new ManiphestTask())->load($workflow);
     }
 
     $transactions = id(new ManiphestTransaction())->loadAllWhere(
       'taskID = %d ORDER BY id ASC',
       $task->getID());
 
     $extensions = ManiphestTaskExtensions::newExtensions();
     $aux_fields = $extensions->loadFields($task, $user);
 
     $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 ($transactions as $transaction) {
       foreach ($transaction->extractPHIDs() as $phid) {
         $phids[$phid] = 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);
 
     $phids = array_merge(
       $phids,
       array_mergev(mpull($aux_fields, 'getRequiredHandlePHIDs')));
 
     $this->loadHandles($phids);
 
     $handles = $this->getLoadedHandles();
     foreach ($aux_fields as $aux_field) {
       $aux_field->setHandles($handles);
     }
 
     $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 $xaction) {
       if ($xaction->hasComments()) {
         $engine->addObject($xaction, ManiphestTransaction::MARKUP_FIELD_BODY);
       }
     }
 
     foreach ($aux_fields as $aux_field) {
       foreach ($aux_field->getMarkupFields() as $markup_field) {
         $engine->addObject($aux_field, $markup_field);
         $aux_field->setMarkupEngine($engine);
       }
     }
 
     $engine->process();
 
     $transaction_types = ManiphestTransactionType::getTransactionTypeMap();
     $resolution_types = ManiphestTaskStatus::getTaskStatusMap();
 
     if ($task->getStatus() == ManiphestTaskStatus::STATUS_OPEN) {
       $resolution_types = array_select_keys(
         $resolution_types,
         array(
           ManiphestTaskStatus::STATUS_CLOSED_RESOLVED,
           ManiphestTaskStatus::STATUS_CLOSED_WONTFIX,
           ManiphestTaskStatus::STATUS_CLOSED_INVALID,
           ManiphestTaskStatus::STATUS_CLOSED_SPITE,
         ));
     } else {
       $resolution_types = array(
         ManiphestTaskStatus::STATUS_OPEN => 'Reopened',
       );
       $transaction_types[ManiphestTransactionType::TYPE_STATUS] =
         'Reopen Task';
       unset($transaction_types[ManiphestTransactionType::TYPE_PRIORITY]);
       unset($transaction_types[ManiphestTransactionType::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');
 
     if ($is_serious) {
       // Prevent tasks from being closed "out of spite" in serious business
       // installs.
       unset($resolution_types[ManiphestTaskStatus::STATUS_CLOSED_SPITE]);
     }
 
     $comment_form = new AphrontFormView();
     $comment_form
       ->setUser($user)
+      ->setShaded(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('Resolution'))
           ->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!')));
 
     $control_map = array(
       ManiphestTransactionType::TYPE_STATUS   => 'resolution',
       ManiphestTransactionType::TYPE_OWNER    => 'assign_to',
       ManiphestTransactionType::TYPE_CCS      => 'ccs',
       ManiphestTransactionType::TYPE_PRIORITY => 'priority',
       ManiphestTransactionType::TYPE_PROJECTS => 'projects',
       ManiphestTransactionType::TYPE_ATTACH   => 'file',
     );
 
     $tokenizer_map = array(
       ManiphestTransactionType::TYPE_PROJECTS => array(
         'id'          => 'projects-tokenizer',
         'src'         => '/typeahead/common/projects/',
         'ondemand'    => PhabricatorEnv::getEnvConfig('tokenizer.ondemand'),
         'placeholder' => pht('Type a project name...'),
       ),
       ManiphestTransactionType::TYPE_OWNER => array(
         'id'          => 'assign-tokenizer',
         'src'         => '/typeahead/common/users/',
         'value'       => $default_claim,
         'limit'       => 1,
         'ondemand'    => PhabricatorEnv::getEnvConfig('tokenizer.ondemand'),
         'placeholder' => pht('Type a user name...'),
       ),
       ManiphestTransactionType::TYPE_CCS => array(
         'id'          => 'cc-tokenizer',
         'src'         => '/typeahead/common/mailable/',
         'ondemand'    => PhabricatorEnv::getEnvConfig('tokenizer.ondemand'),
         'placeholder' => pht('Type a user or mailing list...'),
       ),
     );
 
     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 = id(new PhabricatorHeaderView())
       ->setHeader($is_serious ? pht('Add Comment') : pht('Weigh In'));
 
     $preview_panel = hsprintf(
       '<div class="aphront-panel-preview">
         <div id="transaction-preview">
           <div class="aphront-panel-preview-loading-text">%s</div>
         </div>
       </div>',
       pht('Loading preview...'));
 
     $transaction_view = new ManiphestTransactionListView();
     $transaction_view->setTransactions($transactions);
     $transaction_view->setHandles($this->getLoadedHandles());
     $transaction_view->setUser($user);
     $transaction_view->setAuxiliaryFields($aux_fields);
     $transaction_view->setMarkupEngine($engine);
 
     $object_name = 'T'.$task->getID();
     $actions = $this->buildActionView($task);
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($object_name)
         ->setHref('/'.$object_name))
       ->setActionList($actions)
       ->addAction(
         id(new PHUIListItemView())
           ->setHref($this->getApplicationURI('/task/create/'))
           ->setName(pht('Create Task'))
           ->setIcon('create'));
 
     $header = $this->buildHeaderView($task);
     $properties = $this->buildPropertyView($task, $aux_fields, $edges, $engine);
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
         $context_bar,
         $header,
         $actions,
         $properties,
         $transaction_view,
         $comment_header,
         $comment_form,
         $preview_panel,
       ),
       array(
         'title' => 'T'.$task->getID().' '.$task->getTitle(),
         'pageObjects' => array($task->getPHID()),
         'device' => true,
       ));
   }
 
   private function buildHeaderView(ManiphestTask $task) {
     $view = id(new PhabricatorHeaderView())
       ->setHeader($task->getTitle());
 
     $view->addTag(ManiphestView::renderTagForTask($task));
 
     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();
 
     $view = id(new PhabricatorActionListView())
       ->setUser($viewer)
       ->setObject($task)
       ->setObjectURI($this->getRequest()->getRequestURI())
       ->addAction(
       id(new PhabricatorActionView())
         ->setName(pht('Edit Task'))
         ->setIcon('edit')
         ->setHref($this->getApplicationURI("/task/edit/{$id}/")));
 
     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'));
 
     $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'));
 
     $view->addAction(
       id(new PhabricatorActionView())
         ->setName(pht('Edit Differential Revisions'))
         ->setHref("/search/attach/{$phid}/DREV/")
         ->setWorkflow(true)
         ->setIcon('attach'));
 
     $pholio_app =
       PhabricatorApplication::getByClass('PhabricatorApplicationPholio');
     if ($pholio_app->isInstalled()) {
       $view->addAction(
         id(new PhabricatorActionView())
         ->setName(pht('Edit Pholio Mocks'))
         ->setHref("/search/attach/{$phid}/MOCK/edge/")
         ->setWorkflow(true)
         ->setIcon('attach'));
     }
 
     return $view;
   }
 
   private function buildPropertyView(
     ManiphestTask $task,
     array $aux_fields,
     array $edges,
     PhabricatorMarkupEngine $engine) {
 
     $viewer = $this->getRequest()->getUser();
 
     $view = id(new PhabricatorPropertyListView())
       ->setUser($viewer)
       ->setObject($task);
 
     $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()));
 
     $view->addProperty(
       pht('Subscribers'),
       $task->getCCPHIDs()
       ? $this->renderHandlesForPHIDs($task->getCCPHIDs(), ',')
       : phutil_tag('em', array(), pht('None')));
 
     $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));
     }
 
     $view->addProperty(
       pht('Projects'),
       $task->getProjectPHIDs()
       ? $this->renderHandlesForPHIDs($task->getProjectPHIDs(), ',')
       : phutil_tag('em', array(), pht('None')));
 
     foreach ($aux_fields as $aux_field) {
       $value = $aux_field->renderForDetailView();
       if (strlen($value)) {
         $view->addProperty($aux_field->getLabel(), $value);
       }
     }
 
 
     $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);
 
       $files = id(new PhabricatorFile())->loadAllWhere(
         'phid IN (%Ls)',
         $file_phids);
 
       $file_view = new PhabricatorFileLinkListView();
       $file_view->setFiles($files);
 
       $view->addProperty(
         pht('Files'),
         $file_view->render());
     }
 
     $view->invokeWillRenderEvent();
 
     if (strlen($task->getDescription())) {
       $view->addSectionHeader(pht('Description'));
       $view->addTextContent(
         phutil_tag(
           'div',
           array(
             'class' => 'phabricator-remarkup',
           ),
           $engine->getOutput($task, ManiphestTask::MARKUP_FIELD_DESCRIPTION)));
     }
 
     return $view;
   }
 
 }
diff --git a/src/applications/maniphest/controller/ManiphestTaskEditController.php b/src/applications/maniphest/controller/ManiphestTaskEditController.php
index 3cf3de58c..8283cf13e 100644
--- a/src/applications/maniphest/controller/ManiphestTaskEditController.php
+++ b/src/applications/maniphest/controller/ManiphestTaskEditController.php
@@ -1,574 +1,577 @@
 <?php
 
 /**
  * @group maniphest
  */
 final class ManiphestTaskEditController extends ManiphestController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $files = array();
     $parent_task = null;
     $template_id = null;
 
     if ($this->id) {
       $task = id(new ManiphestTask())->load($this->id);
       if (!$task) {
         return new Aphront404Response();
       }
     } else {
       $task = new ManiphestTask();
       $task->setPriority(ManiphestTaskPriority::getDefaultPriority());
       $task->setAuthorPHID($user->getPHID());
 
       // These allow task creation with defaults.
       if (!$request->isFormPost()) {
         $task->setTitle($request->getStr('title'));
 
         $default_projects = $request->getStr('projects');
         if ($default_projects) {
           $task->setProjectPHIDs(explode(';', $default_projects));
         }
 
         $task->setDescription($request->getStr('description'));
 
         $assign = $request->getStr('assign');
         if (strlen($assign)) {
           $assign_user = id(new PhabricatorUser())->loadOneWhere(
             'username = %s',
             $assign);
           if ($assign_user) {
             $task->setOwnerPHID($assign_user->getPHID());
           }
         }
       }
 
       $file_phids = $request->getArr('files', array());
       if (!$file_phids) {
         // Allow a single 'file' key instead, mostly since Mac OS X urlencodes
         // square brackets in URLs when passed to 'open', so you can't 'open'
         // a URL like '?files[]=xyz' and have PHP interpret it correctly.
         $phid = $request->getStr('file');
         if ($phid) {
           $file_phids = array($phid);
         }
       }
 
       if ($file_phids) {
         $files = id(new PhabricatorFile())->loadAllWhere(
           'phid IN (%Ls)',
           $file_phids);
       }
 
       $template_id = $request->getInt('template');
 
       // You can only have a parent task if you're creating a new task.
       $parent_id = $request->getInt('parent');
       if ($parent_id) {
         $parent_task = id(new ManiphestTask())->load($parent_id);
         if (!$template_id) {
           $template_id = $parent_id;
         }
       }
     }
 
     $errors = array();
     $e_title = true;
 
     $extensions = ManiphestTaskExtensions::newExtensions();
     $aux_fields = $extensions->loadFields($task, $user);
 
     if ($request->isFormPost()) {
       $changes = array();
 
       $new_title = $request->getStr('title');
       $new_desc = $request->getStr('description');
       $new_status = $request->getStr('status');
 
       $workflow = '';
 
       if ($task->getID()) {
         if ($new_title != $task->getTitle()) {
           $changes[ManiphestTransactionType::TYPE_TITLE] = $new_title;
         }
         if ($new_desc != $task->getDescription()) {
           $changes[ManiphestTransactionType::TYPE_DESCRIPTION] = $new_desc;
         }
         if ($new_status != $task->getStatus()) {
           $changes[ManiphestTransactionType::TYPE_STATUS] = $new_status;
         }
       } else {
         $task->setTitle($new_title);
         $task->setDescription($new_desc);
         $changes[ManiphestTransactionType::TYPE_STATUS] =
           ManiphestTaskStatus::STATUS_OPEN;
 
         $workflow = 'create';
       }
 
       $owner_tokenizer = $request->getArr('assigned_to');
       $owner_phid = reset($owner_tokenizer);
 
       if (!strlen($new_title)) {
         $e_title = pht('Required');
         $errors[] = pht('Title is required.');
       }
 
       foreach ($aux_fields as $aux_arr_key => $aux_field) {
         $aux_field->setValueFromRequest($request);
         $aux_key = $aux_field->getAuxiliaryKey();
         $aux_old_value = $task->getAuxiliaryAttribute($aux_key);
 
         if ((int)$aux_old_value === $aux_field->getValueForStorage()) {
           unset($aux_fields[$aux_arr_key]);
           continue;
         }
 
         if ($aux_field->isRequired() && !$aux_field->getValue()) {
           $errors[] = pht('%s is required.', $aux_field->getLabel());
           $aux_field->setError(pht('Required'));
         }
 
         try {
           $aux_field->validate();
         } catch (Exception $e) {
           $errors[] = $e->getMessage();
           $aux_field->setError(pht('Invalid'));
         }
       }
 
       if ($errors) {
         $task->setPriority($request->getInt('priority'));
         $task->setOwnerPHID($owner_phid);
         $task->setCCPHIDs($request->getArr('cc'));
         $task->setProjectPHIDs($request->getArr('projects'));
       } else {
         if ($request->getInt('priority') != $task->getPriority()) {
           $changes[ManiphestTransactionType::TYPE_PRIORITY] =
             $request->getInt('priority');
         }
 
         if ($owner_phid != $task->getOwnerPHID()) {
           $changes[ManiphestTransactionType::TYPE_OWNER] = $owner_phid;
         }
 
         if ($request->getArr('cc') != $task->getCCPHIDs()) {
           $changes[ManiphestTransactionType::TYPE_CCS] = $request->getArr('cc');
         }
 
         $new_proj_arr = $request->getArr('projects');
         $new_proj_arr = array_values($new_proj_arr);
         sort($new_proj_arr);
 
         $cur_proj_arr = $task->getProjectPHIDs();
         $cur_proj_arr = array_values($cur_proj_arr);
         sort($cur_proj_arr);
 
         if ($new_proj_arr != $cur_proj_arr) {
           $changes[ManiphestTransactionType::TYPE_PROJECTS] = $new_proj_arr;
         }
 
         if ($files) {
           $file_map = mpull($files, 'getPHID');
           $file_map = array_fill_keys($file_map, array());
           $changes[ManiphestTransactionType::TYPE_ATTACH] = array(
             PhabricatorFilePHIDTypeFile::TYPECONST => $file_map,
           );
         }
 
         $content_source = PhabricatorContentSource::newForSource(
           PhabricatorContentSource::SOURCE_WEB,
           array(
             'ip' => $request->getRemoteAddr(),
           ));
 
         $template = new ManiphestTransaction();
         $template->setAuthorPHID($user->getPHID());
         $template->setContentSource($content_source);
         $transactions = array();
 
         foreach ($changes as $type => $value) {
           $transaction = clone $template;
           $transaction->setTransactionType($type);
           $transaction->setNewValue($value);
           $transactions[] = $transaction;
         }
 
         if ($aux_fields) {
           foreach ($aux_fields as $aux_field) {
             $transaction = clone $template;
             $transaction->setTransactionType(
               ManiphestTransactionType::TYPE_AUXILIARY);
             $aux_key = $aux_field->getAuxiliaryKey();
             $transaction->setMetadataValue('aux:key', $aux_key);
             $transaction->setNewValue($aux_field->getValueForStorage());
             $transactions[] = $transaction;
           }
         }
 
         if ($transactions) {
           $is_new = !$task->getID();
 
           $event = new PhabricatorEvent(
             PhabricatorEventType::TYPE_MANIPHEST_WILLEDITTASK,
             array(
               'task'          => $task,
               'new'           => $is_new,
               'transactions'  => $transactions,
             ));
           $event->setUser($user);
           $event->setAphrontRequest($request);
           PhutilEventEngine::dispatchEvent($event);
 
           $task = $event->getValue('task');
           $transactions = $event->getValue('transactions');
 
           $editor = new ManiphestTransactionEditor();
           $editor->setActor($user);
           $editor->setAuxiliaryFields($aux_fields);
           $editor->applyTransactions($task, $transactions);
 
           $event = new PhabricatorEvent(
             PhabricatorEventType::TYPE_MANIPHEST_DIDEDITTASK,
             array(
               'task'          => $task,
               'new'           => $is_new,
               'transactions'  => $transactions,
             ));
           $event->setUser($user);
           $event->setAphrontRequest($request);
           PhutilEventEngine::dispatchEvent($event);
         }
 
 
         if ($parent_task) {
           id(new PhabricatorEdgeEditor())
             ->setActor($user)
             ->addEdge(
               $parent_task->getPHID(),
               PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK,
               $task->getPHID())
             ->save();
           $workflow = $parent_task->getID();
         }
 
         if ($request->isAjax()) {
           return id(new AphrontAjaxResponse())->setContent(
             array(
               'tasks' => $this->renderSingleTask($task),
             ));
         }
 
         $redirect_uri = '/T'.$task->getID();
 
         if ($workflow) {
           $redirect_uri .= '?workflow='.$workflow;
         }
 
         return id(new AphrontRedirectResponse())
           ->setURI($redirect_uri);
       }
     } else {
       if (!$task->getID()) {
         $task->setCCPHIDs(array(
           $user->getPHID(),
         ));
         if ($template_id) {
           $template_task = id(new ManiphestTask())->load($template_id);
           if ($template_task) {
             $task->setCCPHIDs($template_task->getCCPHIDs());
             $task->setProjectPHIDs($template_task->getProjectPHIDs());
             $task->setOwnerPHID($template_task->getOwnerPHID());
             $task->setPriority($template_task->getPriority());
 
             if ($aux_fields) {
               $template_task->loadAndAttachAuxiliaryAttributes();
               foreach ($aux_fields as $aux_field) {
                 if (!$aux_field->shouldCopyWhenCreatingSimilarTask()) {
                   continue;
                 }
 
                 $aux_key = $aux_field->getAuxiliaryKey();
                 $value = $template_task->getAuxiliaryAttribute($aux_key);
                 $aux_field->setValueFromStorage($value);
               }
             }
           }
         }
       }
     }
 
     $phids = array_merge(
       array($task->getOwnerPHID()),
       $task->getCCPHIDs(),
       $task->getProjectPHIDs(),
       array_mergev(mpull($aux_fields, 'getRequiredHandlePHIDs')));
 
     if ($parent_task) {
       $phids[] = $parent_task->getPHID();
     }
 
     $phids = array_filter($phids);
     $phids = array_unique($phids);
 
     $handles = $this->loadViewerHandles($phids);
 
     foreach ($aux_fields as $aux_field) {
       $aux_field->setHandles($handles);
     }
 
     $tvalues = mpull($handles, 'getFullName', 'getPHID');
 
     $error_view = null;
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setErrors($errors);
       $error_view->setTitle(pht('Form Errors'));
     }
 
     $priority_map = ManiphestTaskPriority::getTaskPriorityMap();
 
     if ($task->getOwnerPHID()) {
       $assigned_value = array(
         $task->getOwnerPHID() => $handles[$task->getOwnerPHID()]->getFullName(),
       );
     } else {
       $assigned_value = array();
     }
 
     if ($task->getCCPHIDs()) {
       $cc_value = array_select_keys($tvalues, $task->getCCPHIDs());
     } else {
       $cc_value = array();
     }
 
     if ($task->getProjectPHIDs()) {
       $projects_value = array_select_keys($tvalues, $task->getProjectPHIDs());
     } else {
       $projects_value = array();
     }
 
     $cancel_id = nonempty($task->getID(), $template_id);
     if ($cancel_id) {
       $cancel_uri = '/T'.$cancel_id;
     } else {
       $cancel_uri = '/maniphest/';
     }
 
     if ($task->getID()) {
       $button_name = pht('Save Task');
       $header_name = pht('Edit Task');
     } else if ($parent_task) {
       $cancel_uri = '/T'.$parent_task->getID();
       $button_name = pht('Create Task');
       $header_name = pht('Create New Subtask');
     } else {
       $button_name = pht('Create Task');
       $header_name = pht('Create New Task');
     }
 
     require_celerity_resource('maniphest-task-edit-css');
 
     $project_tokenizer_id = celerity_generate_unique_node_id();
 
     if ($request->isAjax()) {
-      $form = new AphrontFormLayoutView();
+      $form = new PHUIFormLayoutView();
     } else {
       $form = new AphrontFormView();
-      $form->setFlexible(true);
       $form
         ->setUser($user)
         ->addHiddenInput('template', $template_id);
     }
 
     if ($parent_task) {
       $form
         ->appendChild(
           id(new AphrontFormStaticControl())
             ->setLabel(pht('Parent Task'))
             ->setValue($handles[$parent_task->getPHID()]->getFullName()))
         ->addHiddenInput('parent', $parent_task->getID());
     }
 
     $form
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setLabel(pht('Title'))
           ->setName('title')
           ->setError($e_title)
           ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_SHORT)
           ->setValue($task->getTitle()));
 
     if ($task->getID()) {
       // Only show this in "edit" mode, not "create" mode, since creating a
       // non-open task is kind of silly and it would just clutter up the
       // "create" interface.
       $form
         ->appendChild(
           id(new AphrontFormSelectControl())
             ->setLabel(pht('Status'))
             ->setName('status')
             ->setValue($task->getStatus())
             ->setOptions(ManiphestTaskStatus::getTaskStatusMap()));
     }
 
     $form
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setLabel(pht('Assigned To'))
           ->setName('assigned_to')
           ->setValue($assigned_value)
           ->setUser($user)
           ->setDatasource('/typeahead/common/users/')
           ->setLimit(1))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setLabel(pht('CC'))
           ->setName('cc')
           ->setValue($cc_value)
           ->setUser($user)
           ->setDatasource('/typeahead/common/mailable/'))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Priority'))
           ->setName('priority')
           ->setOptions($priority_map)
           ->setValue($task->getPriority()))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setLabel(pht('Projects'))
           ->setName('projects')
           ->setValue($projects_value)
           ->setID($project_tokenizer_id)
           ->setCaption(
             javelin_tag(
               'a',
               array(
                 'href'        => '/project/create/',
                 'mustcapture' => true,
                 'sigil'       => 'project-create',
               ),
               pht('Create New Project')))
           ->setDatasource('/typeahead/common/projects/'));
 
     foreach ($aux_fields as $aux_field) {
       if ($aux_field->isRequired() &&
           !$aux_field->getError() &&
           !$aux_field->getValue()) {
         $aux_field->setError(true);
       }
 
       $aux_control = $aux_field->renderControl();
       $form->appendChild($aux_control);
     }
 
     require_celerity_resource('aphront-error-view-css');
 
     Javelin::initBehavior('project-create', array(
       'tokenizerID' => $project_tokenizer_id,
     ));
 
     if ($files) {
       $file_display = mpull($files, 'getName');
       $file_display = phutil_implode_html(phutil_tag('br'), $file_display);
 
       $form->appendChild(
         id(new AphrontFormMarkupControl())
           ->setLabel(pht('Files'))
           ->setValue($file_display));
 
       foreach ($files as $ii => $file) {
         $form->addHiddenInput('files['.$ii.']', $file->getPHID());
       }
     }
 
 
     $description_control = new PhabricatorRemarkupControl();
     // "Upsell" creating tasks via email in create flows if the instance is
     // configured for this awesomeness.
     $email_create = PhabricatorEnv::getEnvConfig(
       'metamta.maniphest.public-create-email');
     if (!$task->getID() && $email_create) {
       $email_hint = pht(
         'You can also create tasks by sending an email to: %s',
         phutil_tag('tt', array(), $email_create));
       $description_control->setCaption($email_hint);
     }
 
     $description_control
       ->setLabel(pht('Description'))
       ->setName('description')
       ->setID('description-textarea')
       ->setValue($task->getDescription())
       ->setUser($user);
 
     $form
       ->appendChild($description_control);
 
 
     if ($request->isAjax()) {
       $dialog = id(new AphrontDialogView())
         ->setUser($user)
         ->setWidth(AphrontDialogView::WIDTH_FULL)
         ->setTitle($header_name)
         ->appendChild(
           array(
             $error_view,
             $form,
           ))
         ->addCancelButton($cancel_uri)
         ->addSubmitButton($button_name);
       return id(new AphrontDialogResponse())->setDialog($dialog);
     }
 
     $form
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton($cancel_uri)
           ->setValue($button_name));
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($header_name)
+      ->setFormError($error_view)
+      ->setForm($form);
+
     $preview = id(new PHUIRemarkupPreviewPanel())
       ->setHeader(pht('Description Preview'))
       ->setControlID('description-textarea')
       ->setPreviewURI($this->getApplicationURI('task/descriptionpreview/'));
 
     if ($task->getID()) {
       $page_objects = array( $task->getPHID() );
     } else {
       $page_objects = array();
     }
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($header_name)
         ->setHref($this->getApplicationURI('/task/create/')))
       ->addAction(
         id(new PHUIListItemView())
           ->setHref($this->getApplicationURI('/task/create/'))
           ->setName(pht('Create Task'))
           ->setIcon('create'));
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $error_view,
-        $form,
+        $form_box,
         $preview,
       ),
       array(
         'title' => $header_name,
         'pageObjects' => $page_objects,
         'device' => true,
       ));
   }
 }
diff --git a/src/applications/maniphest/controller/ManiphestTaskListController.php b/src/applications/maniphest/controller/ManiphestTaskListController.php
index 08d11af40..f2f6893f0 100644
--- a/src/applications/maniphest/controller/ManiphestTaskListController.php
+++ b/src/applications/maniphest/controller/ManiphestTaskListController.php
@@ -1,977 +1,976 @@
 <?php
 
 /**
  * @group maniphest
  */
 final class ManiphestTaskListController extends ManiphestController {
 
   const DEFAULT_PAGE_SIZE = 1000;
 
   private $view;
 
   public function willProcessRequest(array $data) {
     $this->view = idx($data, 'view');
   }
 
   private function getArrToStrList($key) {
     $arr = $this->getRequest()->getArr($key);
     $arr = implode(',', $arr);
     return nonempty($arr, null);
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     if ($request->isFormPost()) {
       // Redirect to GET so URIs can be copy/pasted.
 
       $task_ids   = $request->getStr('set_tasks');
       $task_ids   = nonempty($task_ids, null);
 
       $search_text = $request->getStr('set_search');
 
       $min_priority = $request->getInt('set_lpriority');
 
       $max_priority = $request->getInt('set_hpriority');
 
       $uri = $request->getRequestURI()
         ->alter('users',         $this->getArrToStrList('set_users'))
         ->alter('projects',      $this->getArrToStrList('set_projects'))
         ->alter('aprojects',     $this->getArrToStrList('set_aprojects'))
         ->alter('useraprojects', $this->getArrToStrList('set_useraprojects'))
         ->alter('xprojects',     $this->getArrToStrList('set_xprojects'))
         ->alter('owners',        $this->getArrToStrList('set_owners'))
         ->alter('authors',       $this->getArrToStrList('set_authors'))
         ->alter('lpriority',     $min_priority)
         ->alter('hpriority',     $max_priority)
         ->alter('tasks',         $task_ids)
         ->alter('search',        $search_text);
 
       return id(new AphrontRedirectResponse())->setURI($uri);
     }
 
     $nav = $this->buildBaseSideNav();
 
     $has_filter = array(
       'action' => true,
       'created' => true,
       'subscribed' => true,
       'triage' => true,
       'projecttriage' => true,
       'projectall' => true,
     );
 
     $query = null;
     $key = $request->getStr('key');
     if (!$key && !$this->view) {
       if ($this->getDefaultQuery()) {
         $key = $this->getDefaultQuery()->getQueryKey();
       }
     }
 
     if ($key) {
       $query = id(new PhabricatorSearchQuery())->loadOneWhere(
         'queryKey = %s',
         $key);
     }
 
     // If the user is running a saved query, load query parameters from that
     // query. Otherwise, build a new query object from the HTTP request.
 
     if ($query) {
       $nav->selectFilter('Q:'.$query->getQueryKey(), 'custom');
       $this->view = 'custom';
     } else {
       $this->view = $nav->selectFilter($this->view, 'action');
       $query = $this->buildQueryFromRequest();
     }
 
     // Execute the query.
 
     list($tasks, $handles, $total_count) = self::loadTasks(
       $query,
       $user);
 
     // Extract information we need to render the filters from the query.
 
     $search_text    = $query->getParameter('fullTextSearch');
 
     $user_phids     = $query->getParameter('userPHIDs', array());
     $task_ids       = $query->getParameter('taskIDs', array());
     $owner_phids    = $query->getParameter('ownerPHIDs', array());
     $author_phids   = $query->getParameter('authorPHIDs', array());
     $project_phids  = $query->getParameter('projectPHIDs', array());
     $any_project_phids = $query->getParameter(
       'anyProjectPHIDs',
       array());
     $any_user_project_phids = $query->getParameter(
       'anyUserProjectPHIDs',
       array());
     $exclude_project_phids = $query->getParameter(
       'excludeProjectPHIDs',
       array());
     $low_priority   = $query->getParameter('lowPriority');
     $high_priority  = $query->getParameter('highPriority');
 
     $page_size = $query->getParameter('limit');
     $page = $query->getParameter('offset');
 
     $q_status = $query->getParameter('status');
     $q_group  = $query->getParameter('group');
     $q_order  = $query->getParameter('order');
 
     $form = id(new AphrontFormView())
       ->setUser($user)
-      ->setNoShading(true)
       ->setAction(
           $request->getRequestURI()
             ->alter('key', null)
             ->alter(
               $this->getStatusRequestKey(),
               $this->getStatusRequestValue($q_status))
             ->alter(
               $this->getOrderRequestKey(),
               $this->getOrderRequestValue($q_order))
             ->alter(
               $this->getGroupRequestKey(),
               $this->getGroupRequestValue($q_group)));
 
     if (isset($has_filter[$this->view])) {
       $tokens = array();
       foreach ($user_phids as $phid) {
         $tokens[$phid] = $handles[$phid]->getFullName();
       }
       $form->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setDatasource('/typeahead/common/searchowner/')
           ->setName('set_users')
           ->setLabel(pht('Users'))
           ->setValue($tokens));
     }
 
     if ($this->view == 'custom') {
       $form->appendChild(
         id(new AphrontFormTextControl())
           ->setName('set_search')
           ->setLabel(pht('Search'))
           ->setValue($search_text));
       $form->appendChild(
         id(new AphrontFormTextControl())
           ->setName('set_tasks')
           ->setLabel(pht('Task IDs'))
           ->setValue(join(',', $task_ids)));
 
       $tokens = array();
       foreach ($owner_phids as $phid) {
         $tokens[$phid] = $handles[$phid]->getFullName();
       }
       $form->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setDatasource('/typeahead/common/searchowner/')
           ->setName('set_owners')
           ->setLabel(pht('Owners'))
           ->setValue($tokens));
 
       $tokens = array();
       foreach ($author_phids as $phid) {
         $tokens[$phid] = $handles[$phid]->getFullName();
       }
       $form->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setDatasource('/typeahead/common/authors/')
           ->setName('set_authors')
           ->setLabel(pht('Authors'))
           ->setValue($tokens));
     }
 
     $tokens = array();
     foreach ($project_phids as $phid) {
       $tokens[$phid] = $handles[$phid]->getFullName();
     }
     if ($this->view != 'projectall' && $this->view != 'projecttriage') {
 
       $caption = null;
       if ($this->view == 'custom') {
         $caption = pht('Find tasks in ALL of these projects ("AND" query).');
       }
 
       $form->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setDatasource('/typeahead/common/searchproject/')
           ->setName('set_projects')
           ->setLabel(pht('Projects'))
           ->setCaption($caption)
           ->setValue($tokens));
     }
 
     if ($this->view == 'custom') {
       $atokens = array();
       foreach ($any_project_phids as $phid) {
         $atokens[$phid] = $handles[$phid]->getFullName();
       }
       $form->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setDatasource('/typeahead/common/projects/')
           ->setName('set_aprojects')
           ->setLabel(pht('Any Projects'))
           ->setCaption(pht('Find tasks in ANY of these projects ("OR" query).'))
           ->setValue($atokens));
 
       $tokens = array();
       foreach ($any_user_project_phids as $phid) {
         $tokens[$phid] = $handles[$phid]->getFullName();
       }
       $form->appendChild(
         id(new AphrontFormTokenizerControl())
         ->setDatasource('/typeahead/common/users/')
         ->setName('set_useraprojects')
         ->setLabel(pht('Any User Projects'))
         ->setCaption(
           pht('Find tasks in ANY of these users\' projects ("OR" query).'))
         ->setValue($tokens));
 
       $tokens = array();
       foreach ($exclude_project_phids as $phid) {
         $tokens[$phid] = $handles[$phid]->getFullName();
       }
       $form->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setDatasource('/typeahead/common/projects/')
           ->setName('set_xprojects')
           ->setLabel(pht('Exclude Projects'))
           ->setCaption(pht('Find tasks NOT in any of these projects.'))
           ->setValue($tokens));
 
       $priority = ManiphestTaskPriority::getLowestPriority();
       if ($low_priority !== null) {
         $priority = $low_priority;
       }
 
       $form->appendChild(
           id(new AphrontFormSelectControl())
             ->setLabel(pht('Min Priority'))
             ->setName('set_lpriority')
             ->setValue($priority)
             ->setOptions(array_reverse(
                 ManiphestTaskPriority::getTaskPriorityMap(), true)));
 
       $priority = ManiphestTaskPriority::getHighestPriority();
       if ($high_priority !== null) {
         $priority = $high_priority;
       }
 
       $form->appendChild(
           id(new AphrontFormSelectControl())
             ->setLabel(pht('Max Priority'))
             ->setName('set_hpriority')
             ->setValue($priority)
             ->setOptions(ManiphestTaskPriority::getTaskPriorityMap()));
 
     }
 
     $form
       ->appendChild($this->renderStatusControl($q_status))
       ->appendChild($this->renderGroupControl($q_group))
       ->appendChild($this->renderOrderControl($q_order));
 
     $submit = id(new AphrontFormSubmitControl())
       ->setValue(pht('Filter Tasks'));
 
     // Only show "Save..." for novel queries which have some kind of query
     // parameters set.
     if ($this->view === 'custom'
         && empty($key)
         && $request->getRequestURI()->getQueryParams()) {
       $submit->addCancelButton(
         '/maniphest/custom/edit/?key='.$query->getQueryKey(),
         pht('Save Custom Query...'));
     }
 
     $form->appendChild($submit);
 
     $create_uri = new PhutilURI('/maniphest/task/create/');
     if ($project_phids) {
       // If we have project filters selected, use them as defaults for task
       // creation.
       $create_uri->setQueryParam('projects', implode(';', $project_phids));
     }
 
     $filter = new AphrontListFilterView();
     if (empty($key)) {
       $filter->appendChild($form);
     }
 
     $have_tasks = false;
     foreach ($tasks as $group => $list) {
       if (count($list)) {
         $have_tasks = true;
         break;
       }
     }
 
     require_celerity_resource('maniphest-task-summary-css');
 
     $list_container = new AphrontNullView();
     $list_container->appendChild(hsprintf(
       '<div class="maniphest-list-container">'));
 
     if (!$have_tasks) {
       $no_tasks = pht('No matching tasks.');
       $list_container->appendChild(hsprintf(
         '<h1 class="maniphest-task-group-header">'.
           '%s'.
         '</h1>',
         $no_tasks));
       $result_count = null;
     } else {
       $pager = new AphrontPagerView();
       $pager->setURI($request->getRequestURI(), 'offset');
       $pager->setPageSize($page_size);
       $pager->setOffset($page);
       $pager->setCount($total_count);
 
       $cur = ($pager->getOffset() + 1);
       $max = min($pager->getOffset() + $page_size, $total_count);
       $tot = $total_count;
 
       $results = pht('Displaying tasks %s - %s of %s.',
         number_format($cur),
         number_format($max),
         number_format($tot));
       $result_count = phutil_tag(
         'div',
         array(
           'class' => 'maniphest-total-result-count'
         ),
         $results);
 
       $selector = new AphrontNullView();
 
       $group = $query->getParameter('group');
       $order = $query->getParameter('order');
       $is_draggable =
         ($order == 'priority') &&
         ($group == 'none' || $group == 'priority');
 
       $lists = array();
       foreach ($tasks as $group => $list) {
         $task_list = new ManiphestTaskListView();
         $task_list->setShowBatchControls(true);
         if ($is_draggable) {
           $task_list->setShowSubpriorityControls(true);
         }
         $task_list->setUser($user);
         $task_list->setTasks($list);
         $task_list->setHandles($handles);
 
         $count = number_format(count($list));
 
         $header =
           javelin_tag(
             'h1',
             array(
               'class' => 'maniphest-task-group-header',
               'sigil' => 'task-group',
               'meta'  => array(
                 'priority' => head($list)->getPriority(),
               ),
             ),
             $group.' ('.$count.')');
 
         $lists[] =
           phutil_tag(
             'div',
             array(
               'class' => 'maniphest-task-group'
             ),
             array(
               $header,
               $task_list,
             ));
       }
 
       $selector->appendChild($lists);
       $selector->appendChild($this->renderBatchEditor($query));
 
       $list_container->appendChild($selector);
       $list_container->appendChild($pager);
 
       Javelin::initBehavior(
         'maniphest-subpriority-editor',
         array(
           'uri'   =>  '/maniphest/subpriority/',
         ));
     }
 
     $nav->appendChild($filter);
     $nav->appendChild($result_count);
     $nav->appendChild($list_container);
 
     $title = pht('Task List');
 
     $crumbs = $this->buildApplicationCrumbs()
       ->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName($title))
       ->addAction(
         id(new PHUIListItemView())
           ->setHref($this->getApplicationURI('/task/create/'))
           ->setName(pht('Create Task'))
           ->setIcon('create'));
 
     $nav->setCrumbs($crumbs);
 
     return $this->buildApplicationPage(
       $nav,
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 
   public static function loadTasks(
     PhabricatorSearchQuery $search_query,
     PhabricatorUser $viewer) {
 
     $any_project = false;
     $search_text = $search_query->getParameter('fullTextSearch');
     $user_phids = $search_query->getParameter('userPHIDs', array());
     $task_ids = $search_query->getParameter('taskIDs', array());
     $project_phids = $search_query->getParameter('projectPHIDs', array());
     $any_project_phids = $search_query->getParameter(
       'anyProjectPHIDs',
       array());
     $any_user_project_phids = $search_query->getParameter(
       'anyUserProjectPHIDs',
       array());
     $xproject_phids = $search_query->getParameter(
       'excludeProjectPHIDs',
       array());
     $owner_phids = $search_query->getParameter('ownerPHIDs', array());
     $author_phids = $search_query->getParameter('authorPHIDs', array());
 
     $low_priority = $search_query->getParameter('lowPriority');
     $low_priority = coalesce($low_priority,
         ManiphestTaskPriority::getLowestPriority());
     $high_priority = $search_query->getParameter('highPriority');
     $high_priority = coalesce($high_priority,
       ManiphestTaskPriority::getHighestPriority());
 
     $query = new ManiphestTaskQuery();
     $query->withTaskIDs($task_ids);
 
     if ($project_phids) {
       $query->withAllProjects($project_phids);
     }
 
     if ($xproject_phids) {
       $query->withoutProjects($xproject_phids);
     }
 
     if ($any_project_phids) {
       $query->withAnyProjects($any_project_phids);
     }
 
     if ($owner_phids) {
       $query->withOwners($owner_phids);
     }
 
     if ($author_phids) {
       $query->withAuthors($author_phids);
     }
 
     if ($any_user_project_phids) {
       $query->setViewer($viewer);
       $query->withAnyUserProjects($any_user_project_phids);
     }
 
     $status = $search_query->getParameter('status', 'all');
     if (!empty($status['open']) && !empty($status['closed'])) {
       $query->withStatus(ManiphestTaskQuery::STATUS_ANY);
     } else if (!empty($status['open'])) {
       $query->withStatus(ManiphestTaskQuery::STATUS_OPEN);
     } else {
       $query->withStatus(ManiphestTaskQuery::STATUS_CLOSED);
     }
 
     switch ($search_query->getParameter('view')) {
       case 'action':
         $query->withOwners($user_phids);
         break;
       case 'created':
         $query->withAuthors($user_phids);
         break;
       case 'subscribed':
         $query->withSubscribers($user_phids);
         break;
       case 'triage':
         $query->withOwners($user_phids);
         $query->withPriority(ManiphestTaskPriority::PRIORITY_TRIAGE);
         break;
       case 'alltriage':
         $query->withPriority(ManiphestTaskPriority::PRIORITY_TRIAGE);
         break;
       case 'all':
         break;
       case 'projecttriage':
         $query->withPriority(ManiphestTaskPriority::PRIORITY_TRIAGE);
         break;
       case 'projectall':
         break;
       case 'custom':
         $query->withPrioritiesBetween($low_priority, $high_priority);
         break;
     }
 
     $query->withFullTextSearch($search_text);
 
     $order_map = array(
       'priority'  => ManiphestTaskQuery::ORDER_PRIORITY,
       'created'   => ManiphestTaskQuery::ORDER_CREATED,
       'title'     => ManiphestTaskQuery::ORDER_TITLE,
     );
     $query->setOrderBy(
       idx(
         $order_map,
         $search_query->getParameter('order'),
         ManiphestTaskQuery::ORDER_MODIFIED));
 
     $group_map = array(
       'priority'  => ManiphestTaskQuery::GROUP_PRIORITY,
       'owner'     => ManiphestTaskQuery::GROUP_OWNER,
       'status'    => ManiphestTaskQuery::GROUP_STATUS,
       'project'   => ManiphestTaskQuery::GROUP_PROJECT,
     );
     $query->setGroupBy(
       idx(
         $group_map,
         $search_query->getParameter('group'),
         ManiphestTaskQuery::GROUP_NONE));
 
     $query->setCalculateRows(true);
     $query->setLimit($search_query->getParameter('limit'));
     $query->setOffset($search_query->getParameter('offset'));
 
     $data = $query->execute();
     $total_row_count = $query->getRowCount();
 
     $project_group_phids = array();
     if ($search_query->getParameter('group') == 'project') {
       foreach ($data as $task) {
         foreach ($task->getProjectPHIDs() as $phid) {
           $project_group_phids[] = $phid;
         }
       }
     }
 
     $handle_phids = mpull($data, 'getOwnerPHID');
     $handle_phids = array_merge(
       $handle_phids,
       $project_phids,
       $user_phids,
       $xproject_phids,
       $owner_phids,
       $author_phids,
       $project_group_phids,
       $any_project_phids,
       $any_user_project_phids,
       array_mergev(mpull($data, 'getProjectPHIDs')));
     $handles = id(new PhabricatorObjectHandleData($handle_phids))
       ->setViewer($viewer)
       ->loadHandles();
 
     switch ($search_query->getParameter('group')) {
       case 'priority':
         $data = mgroup($data, 'getPriority');
 
         // If we have invalid priorities, they'll all map to "???". Merge
         // arrays to prevent them from overwriting each other.
 
         $out = array();
         foreach ($data as $pri => $tasks) {
           $out[ManiphestTaskPriority::getTaskPriorityName($pri)][] = $tasks;
         }
         foreach ($out as $pri => $tasks) {
           $out[$pri] = array_mergev($tasks);
         }
         $data = $out;
 
         break;
       case 'status':
         $data = mgroup($data, 'getStatus');
 
         $out = array();
         foreach ($data as $status => $tasks) {
           $out[ManiphestTaskStatus::getTaskStatusFullName($status)] = $tasks;
         }
 
         $data = $out;
         break;
       case 'owner':
         $data = mgroup($data, 'getOwnerPHID');
 
         $out = array();
         foreach ($data as $phid => $tasks) {
           if ($phid) {
             $out[$handles[$phid]->getFullName()] = $tasks;
           } else {
             $out['Unassigned'] = $tasks;
           }
         }
 
         $data = $out;
         ksort($data);
 
         // Move "Unassigned" to the top of the list.
         if (isset($data['Unassigned'])) {
           $data = array('Unassigned' => $out['Unassigned']) + $out;
         }
         break;
       case 'project':
         $grouped = array();
         foreach ($query->getGroupByProjectResults() as $project => $tasks) {
           foreach ($tasks as $task) {
             $group = $project ? $handles[$project]->getName() : 'No Project';
             $grouped[$group][$task->getID()] = $task;
           }
         }
         $data = $grouped;
         ksort($data);
 
         // Move "No Project" to the end of the list.
         if (isset($data['No Project'])) {
           $noproject = $data['No Project'];
           unset($data['No Project']);
           $data += array('No Project' => $noproject);
         }
         break;
       default:
         $data = array(
           'Tasks' => $data,
         );
         break;
     }
 
     return array($data, $handles, $total_row_count);
   }
 
   private function renderBatchEditor(PhabricatorSearchQuery $search_query) {
     $user = $this->getRequest()->getUser();
 
     Javelin::initBehavior(
       'maniphest-batch-selector',
       array(
         'selectAll'   => 'batch-select-all',
         'selectNone'  => 'batch-select-none',
         'submit'      => 'batch-select-submit',
         'status'      => 'batch-select-status-cell',
         'idContainer' => 'batch-select-id-container',
         'formID'      => 'batch-select-form',
       ));
 
     $select_all = javelin_tag(
       'a',
       array(
         'href'        => '#',
         'mustcapture' => true,
         'class'       => 'grey button',
         'id'          => 'batch-select-all',
       ),
       pht('Select All'));
 
     $select_none = javelin_tag(
       'a',
       array(
         'href'        => '#',
         'mustcapture' => true,
         'class'       => 'grey button',
         'id'          => 'batch-select-none',
       ),
       pht('Clear Selection'));
 
     $submit = phutil_tag(
       'button',
       array(
         'id'          => 'batch-select-submit',
         'disabled'    => 'disabled',
         'class'       => 'disabled',
       ),
       pht("Batch Edit Selected \xC2\xBB"));
 
     $export = javelin_tag(
       'a',
       array(
         'href' => '/maniphest/export/'.$search_query->getQueryKey().'/',
         'class' => 'grey button',
       ),
       pht('Export to Excel'));
 
     $hidden = phutil_tag(
       'div',
       array(
         'id' => 'batch-select-id-container',
       ),
       '');
 
     $editor = hsprintf(
       '<div class="maniphest-batch-editor">'.
         '<div class="batch-editor-header">%s</div>'.
         '<table class="maniphest-batch-editor-layout">'.
           '<tr>'.
             '<td>%s%s</td>'.
             '<td>%s</td>'.
             '<td id="batch-select-status-cell">%s</td>'.
             '<td class="batch-select-submit-cell">%s%s</td>'.
           '</tr>'.
         '</table>'.
       '</div>',
       pht('Batch Task Editor'),
       $select_all,
       $select_none,
       $export,
       '',
       $submit,
       $hidden);
 
     $editor = phabricator_form(
       $user,
       array(
         'method' => 'POST',
         'action' => '/maniphest/batch/',
         'id'     => 'batch-select-form',
       ),
       $editor);
 
     return $editor;
   }
 
   private function buildQueryFromRequest() {
     $request  = $this->getRequest();
     $user     = $request->getUser();
 
     $status   = $this->getStatusValueFromRequest();
     $group    = $this->getGroupValueFromRequest();
     $order    = $this->getOrderValueFromRequest();
 
     $user_phids = $request->getStrList(
       'users',
       array($user->getPHID()));
 
     if ($this->view == 'projecttriage' || $this->view == 'projectall') {
       $projects = id(new PhabricatorProjectQuery())
         ->setViewer($user)
         ->withMemberPHIDs($user_phids)
         ->execute();
       $any_project_phids = mpull($projects, 'getPHID');
       $any_user_project_phids = array();
     } else {
       $any_project_phids = $request->getStrList('aprojects');
       $any_user_project_phids = $request->getStrList('useraprojects');
     }
 
     $project_phids = $request->getStrList('projects');
     $exclude_project_phids = $request->getStrList('xprojects');
     $task_ids = $request->getStrList('tasks');
 
     if ($task_ids) {
       // We only need the integer portion of each task ID, so get rid of any
       // non-numeric elements
       $numeric_task_ids = array();
 
       foreach ($task_ids as $task_id) {
         $task_id = preg_replace('/\D+/', '', $task_id);
         if (!empty($task_id)) {
           $numeric_task_ids[] = $task_id;
         }
       }
 
       if (empty($numeric_task_ids)) {
         $numeric_task_ids = array(null);
       }
 
       $task_ids = $numeric_task_ids;
     }
 
     $owner_phids    = $request->getStrList('owners');
     $author_phids   = $request->getStrList('authors');
 
     $search_string  = $request->getStr('search');
 
     $low_priority   = $request->getInt('lpriority');
     $high_priority  = $request->getInt('hpriority');
 
     $page = $request->getInt('offset');
     $page_size = self::DEFAULT_PAGE_SIZE;
 
     $query = new PhabricatorSearchQuery();
     $query->setQuery('<<maniphest>>');
     $query->setParameters(
       array(
         'fullTextSearch'      => $search_string,
         'view'                => $this->view,
         'userPHIDs'           => $user_phids,
         'projectPHIDs'        => $project_phids,
         'anyProjectPHIDs'     => $any_project_phids,
         'anyUserProjectPHIDs' => $any_user_project_phids,
         'excludeProjectPHIDs' => $exclude_project_phids,
         'ownerPHIDs'          => $owner_phids,
         'authorPHIDs'         => $author_phids,
         'taskIDs'             => $task_ids,
         'lowPriority'         => $low_priority,
         'highPriority'        => $high_priority,
         'group'               => $group,
         'order'               => $order,
         'offset'              => $page,
         'limit'               => $page_size,
         'status'              => $status,
       ));
 
     $unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
     $query->save();
     unset($unguarded);
 
     return $query;
   }
 
 /* -(  Toggle Button Controls  )---------------------------------------------
 
   These are a giant mess since we have several different values: the request
   key (GET param used in requests), the request value (short names used in
   requests to keep URIs readable), and the query value (complex value stored in
   the query).
 
 */
 
   private function getStatusValueFromRequest() {
     $map = $this->getStatusMap();
     $val = $this->getRequest()->getStr($this->getStatusRequestKey());
     return idx($map, $val, head($map));
   }
 
   private function getGroupValueFromRequest() {
     $map = $this->getGroupMap();
     $val = $this->getRequest()->getStr($this->getGroupRequestKey());
     return idx($map, $val, head($map));
   }
 
   private function getOrderValueFromRequest() {
     $map = $this->getOrderMap();
     $val = $this->getRequest()->getStr($this->getOrderRequestKey());
     return idx($map, $val, head($map));
   }
 
   private function getStatusRequestKey() {
     return 's';
   }
 
   private function getGroupRequestKey() {
     return 'g';
   }
 
   private function getOrderRequestKey() {
     return 'o';
   }
 
   private function getStatusRequestValue($value) {
     return array_search($value, $this->getStatusMap());
   }
 
   private function getGroupRequestValue($value) {
     return array_search($value, $this->getGroupMap());
   }
 
   private function getOrderRequestValue($value) {
     return array_search($value, $this->getOrderMap());
   }
 
   private function getStatusMap() {
     return array(
       'o'   => array(
         'open' => true,
       ),
       'c'   => array(
         'closed' => true,
       ),
       'oc'  => array(
         'open' => true,
         'closed' => true,
       ),
     );
   }
 
   private function getGroupMap() {
     return array(
       'p' => 'priority',
       'o' => 'owner',
       's' => 'status',
       'j' => 'project',
       'n' => 'none',
     );
   }
 
   private function getOrderMap() {
     return array(
       'p' => 'priority',
       'u' => 'updated',
       'c' => 'created',
       't' => 'title',
     );
   }
 
   private function getStatusButtonMap() {
     return array(
       'o'   => pht('Open'),
       'c'   => pht('Closed'),
       'oc'  => pht('All'),
     );
   }
 
   private function getGroupButtonMap() {
     return array(
       'p' => pht('Priority'),
       'o' => pht('Owner'),
       's' => pht('Status'),
       'j' => pht('Project'),
       'n' => pht('None'),
     );
   }
 
   private function getOrderButtonMap() {
     return array(
       'p' => pht('Priority'),
       'u' => pht('Updated'),
       'c' => pht('Created'),
       't' => pht('Title'),
     );
   }
 
   public function renderStatusControl($value) {
     $request = $this->getRequest();
     return id(new AphrontFormToggleButtonsControl())
       ->setLabel(pht('Status'))
       ->setValue($this->getStatusRequestValue($value))
       ->setBaseURI($request->getRequestURI(), $this->getStatusRequestKey())
       ->setButtons($this->getStatusButtonMap());
   }
 
   public function renderOrderControl($value) {
     $request = $this->getRequest();
     return id(new AphrontFormToggleButtonsControl())
       ->setLabel(pht('Order'))
       ->setValue($this->getOrderRequestValue($value))
       ->setBaseURI($request->getRequestURI(), $this->getOrderRequestKey())
       ->setButtons($this->getOrderButtonMap());
   }
 
   public function renderGroupControl($value) {
     $request = $this->getRequest();
     return id(new AphrontFormToggleButtonsControl())
       ->setLabel(pht('Group'))
       ->setValue($this->getGroupRequestValue($value))
       ->setBaseURI($request->getRequestURI(), $this->getGroupRequestKey())
       ->setButtons($this->getGroupButtonMap());
   }
 
 }
diff --git a/src/applications/owners/controller/PhabricatorOwnersDeleteController.php b/src/applications/owners/controller/PhabricatorOwnersDeleteController.php
index f3f80b777..dd1cf89b5 100644
--- a/src/applications/owners/controller/PhabricatorOwnersDeleteController.php
+++ b/src/applications/owners/controller/PhabricatorOwnersDeleteController.php
@@ -1,43 +1,42 @@
 <?php
 
 final class PhabricatorOwnersDeleteController
   extends PhabricatorOwnersController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $package = id(new PhabricatorOwnersPackage())->load($this->id);
     if (!$package) {
       return new Aphront404Response();
     }
 
     if ($request->isDialogFormPost()) {
       $package->attachActorPHID($user->getPHID());
       $package->delete();
       return id(new AphrontRedirectResponse())->setURI('/owners/');
     }
 
     $text = pht('Are you sure you want to delete the "%s" package? This '.
           'operation can not be undone.', $package->getName());
     $dialog = id(new AphrontDialogView())
       ->setUser($user)
       ->setTitle('Really delete this package?')
-      ->setHeaderColor(PhabricatorActionHeaderView::HEADER_RED)
       ->appendChild(hsprintf(
         '<p>%s</p>',
         $text))
       ->addSubmitButton(pht('Delete'))
       ->addCancelButton('/owners/package/'.$package->getID().'/')
       ->setSubmitURI($request->getRequestURI());
 
     return id(new AphrontDialogResponse())->setDialog($dialog);
   }
 
 }
diff --git a/src/applications/owners/controller/PhabricatorOwnersEditController.php b/src/applications/owners/controller/PhabricatorOwnersEditController.php
index a87b20fbd..d10a202f3 100644
--- a/src/applications/owners/controller/PhabricatorOwnersEditController.php
+++ b/src/applications/owners/controller/PhabricatorOwnersEditController.php
@@ -1,280 +1,279 @@
 <?php
 
 final class PhabricatorOwnersEditController
   extends PhabricatorOwnersController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     if ($this->id) {
       $package = id(new PhabricatorOwnersPackage())->load($this->id);
       if (!$package) {
         return new Aphront404Response();
       }
     } else {
       $package = new PhabricatorOwnersPackage();
       $package->setPrimaryOwnerPHID($user->getPHID());
     }
 
     $e_name = true;
     $e_primary = true;
 
     $errors = array();
 
     if ($request->isFormPost()) {
       $package->setName($request->getStr('name'));
       $package->setDescription($request->getStr('description'));
       $old_auditing_enabled = $package->getAuditingEnabled();
       $package->setAuditingEnabled(
         ($request->getStr('auditing') === 'enabled')
           ? 1
           : 0);
 
       $primary = $request->getArr('primary');
       $primary = reset($primary);
       $old_primary = $package->getPrimaryOwnerPHID();
       $package->setPrimaryOwnerPHID($primary);
 
       $owners = $request->getArr('owners');
       if ($primary) {
         array_unshift($owners, $primary);
       }
       $owners = array_unique($owners);
 
       $paths = $request->getArr('path');
       $repos = $request->getArr('repo');
       $excludes = $request->getArr('exclude');
 
       $path_refs = array();
       for ($ii = 0; $ii < count($paths); $ii++) {
         if (empty($paths[$ii]) || empty($repos[$ii])) {
           continue;
         }
         $path_refs[] = array(
           'repositoryPHID'  => $repos[$ii],
           'path'            => $paths[$ii],
           'excluded'        => $excludes[$ii],
         );
       }
 
       if (!strlen($package->getName())) {
         $e_name = pht('Required');
         $errors[] = pht('Package name is required.');
       } else {
         $e_name = null;
       }
 
       if (!$package->getPrimaryOwnerPHID()) {
         $e_primary = pht('Required');
         $errors[] = pht('Package must have a primary owner.');
       } else {
         $e_primary = null;
       }
 
       if (!$path_refs) {
         $errors[] = pht('Package must include at least one path.');
       }
 
       if (!$errors) {
         $package->attachUnsavedOwners($owners);
         $package->attachUnsavedPaths($path_refs);
         $package->attachOldAuditingEnabled($old_auditing_enabled);
         $package->attachOldPrimaryOwnerPHID($old_primary);
         $package->attachActorPHID($user->getPHID());
         try {
           $package->save();
           return id(new AphrontRedirectResponse())
             ->setURI('/owners/package/'.$package->getID().'/');
         } catch (AphrontQueryDuplicateKeyException $ex) {
           $e_name = pht('Duplicate');
           $errors[] = pht('Package name must be unique.');
         }
       }
     } else {
       $owners = $package->loadOwners();
       $owners = mpull($owners, 'getUserPHID');
 
       $paths = $package->loadPaths();
       $path_refs = array();
       foreach ($paths as $path) {
         $path_refs[] = array(
           'repositoryPHID' => $path->getRepositoryPHID(),
           'path' => $path->getPath(),
           'excluded' => $path->getExcluded(),
         );
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setTitle(pht('Package Errors'));
       $error_view->setErrors($errors);
     }
 
     $handles = $this->loadViewerHandles($owners);
 
     $primary = $package->getPrimaryOwnerPHID();
     if ($primary && isset($handles[$primary])) {
       $token_primary_owner = array(
         $primary => $handles[$primary]->getFullName(),
       );
     } else {
       $token_primary_owner = array();
     }
 
     $token_all_owners = array_select_keys($handles, $owners);
     $token_all_owners = mpull($token_all_owners, 'getFullName');
 
     if ($package->getID()) {
       $title = pht('Edit Package');
       $side_nav_filter = 'edit/'.$this->id;
     } else {
       $title = pht('New Package');
       $side_nav_filter = 'new';
     }
     $this->setSideNavFilter($side_nav_filter);
 
     $repos = id(new PhabricatorRepository())->loadAll();
 
     $default_paths = array();
     foreach ($repos as $repo) {
       $default_path = $repo->getDetail('default-owners-path');
       if ($default_path) {
         $default_paths[$repo->getPHID()] = $default_path;
       }
     }
 
     $repos = mpull($repos, 'getCallsign', 'getPHID');
 
     $template = new AphrontTypeaheadTemplateView();
     $template = $template->render();
 
     Javelin::initBehavior(
       'owners-path-editor',
       array(
         'root'                => 'path-editor',
         'table'               => 'paths',
         'add_button'          => 'addpath',
         'repositories'        => $repos,
         'input_template'      => $template,
         'pathRefs'            => $path_refs,
 
         'completeURI'         => '/diffusion/services/path/complete/',
         'validateURI'         => '/diffusion/services/path/validate/',
 
         'repositoryDefaultPaths' => $default_paths,
       ));
 
     require_celerity_resource('owners-path-editor-css');
 
     $cancel_uri = $package->getID()
       ? '/owners/package/'.$package->getID().'/'
       : '/owners/';
 
     $form = id(new AphrontFormView())
       ->setUser($user)
-      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Name'))
           ->setName('name')
           ->setValue($package->getName())
           ->setError($e_name))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setDatasource('/typeahead/common/usersorprojects/')
           ->setLabel(pht('Primary Owner'))
           ->setName('primary')
           ->setLimit(1)
           ->setValue($token_primary_owner)
           ->setError($e_primary))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setDatasource('/typeahead/common/usersorprojects/')
           ->setLabel(pht('Owners'))
           ->setName('owners')
           ->setValue($token_all_owners))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setName('auditing')
           ->setLabel(pht('Auditing'))
           ->setCaption(
             pht('With auditing enabled, all future commits that touch '.
                 'this package will be reviewed to make sure an owner '.
                 'of the package is involved and the commit message has '.
                 'a valid revision, reviewed by, and author.'))
           ->setOptions(array(
             'disabled'  => pht('Disabled'),
             'enabled'   => pht('Enabled'),
           ))
           ->setValue(
             $package->getAuditingEnabled()
               ? 'enabled'
               : 'disabled'))
       ->appendChild(
         id(new AphrontFormInsetView())
           ->setTitle(pht('Paths'))
           ->addDivAttributes(array('id' => 'path-editor'))
           ->setRightButton(javelin_tag(
               'a',
               array(
                 'href' => '#',
                 'class' => 'button green',
                 'sigil' => 'addpath',
                 'mustcapture' => true,
               ),
               pht('Add New Path')))
           ->setDescription(
             pht('Specify the files and directories which comprise '.
                 'this package.'))
           ->setContent(javelin_tag(
               'table',
               array(
                 'class' => 'owners-path-editor-table',
                 'sigil' => 'paths',
               ),
               '')))
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setLabel(pht('Description'))
           ->setName('description')
           ->setValue($package->getDescription()))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton($cancel_uri)
           ->setValue(pht('Save Package')));
 
-    $header = id(new PhabricatorHeaderView())
-      ->setHeader($title);
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($title)
+      ->setFormError($error_view)
+      ->setForm($form);
 
     $nav = $this->buildSideNavView();
-    $nav->appendChild($error_view);
-    $nav->appendChild($header);
-    $nav->appendChild($form);
+    $nav->appendChild($form_box);
 
     return $this->buildApplicationPage(
       array(
         $nav,
       ),
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 
   protected function getExtraPackageViews(AphrontSideNavFilterView $view) {
     if ($this->id) {
       $view->addFilter('edit/'.$this->id, pht('Edit'));
     } else {
       $view->addFilter('new', pht('New'));
     }
   }
 }
diff --git a/src/applications/owners/controller/PhabricatorOwnersListController.php b/src/applications/owners/controller/PhabricatorOwnersListController.php
index 7783d141d..1a3bc58f6 100644
--- a/src/applications/owners/controller/PhabricatorOwnersListController.php
+++ b/src/applications/owners/controller/PhabricatorOwnersListController.php
@@ -1,345 +1,344 @@
 <?php
 
 final class PhabricatorOwnersListController
   extends PhabricatorOwnersController {
 
   protected $view;
 
   public function willProcessRequest(array $data) {
     $this->view = idx($data, 'view', 'owned');
     $this->setSideNavFilter('view/'.$this->view);
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $package = new PhabricatorOwnersPackage();
     $owner = new PhabricatorOwnersOwner();
     $path = new PhabricatorOwnersPath();
 
     $repository_phid = '';
     if ($request->getStr('repository') != '') {
       $repository_phid = id(new PhabricatorRepository())
         ->loadOneWhere('callsign = %s', $request->getStr('repository'))
         ->getPHID();
     }
 
     switch ($this->view) {
       case 'search':
         $packages = array();
 
         $conn_r = $package->establishConnection('r');
 
         $where = array('1 = 1');
         $join = array();
         $having = '';
 
         if ($request->getStr('name')) {
           $where[] = qsprintf(
             $conn_r,
             'p.name LIKE %~',
             $request->getStr('name'));
         }
 
         if ($repository_phid || $request->getStr('path')) {
 
           $join[] = qsprintf(
             $conn_r,
             'JOIN %T path ON path.packageID = p.id',
             $path->getTableName());
 
           if ($repository_phid) {
             $where[] = qsprintf(
               $conn_r,
               'path.repositoryPHID = %s',
               $repository_phid);
           }
 
           if ($request->getStr('path')) {
             $where[] = qsprintf(
               $conn_r,
               '(path.path LIKE %~ AND NOT path.excluded) OR
                 %s LIKE CONCAT(REPLACE(path.path, %s, %s), %s)',
               $request->getStr('path'),
               $request->getStr('path'),
               '_',
               '\_',
               '%');
             $having = 'HAVING MAX(path.excluded) = 0';
           }
 
         }
 
         if ($request->getArr('owner')) {
           $join[] = qsprintf(
             $conn_r,
             'JOIN %T o ON o.packageID = p.id',
             $owner->getTableName());
           $where[] = qsprintf(
             $conn_r,
             'o.userPHID IN (%Ls)',
             $request->getArr('owner'));
         }
 
         $data = queryfx_all(
           $conn_r,
           'SELECT p.* FROM %T p %Q WHERE %Q GROUP BY p.id %Q',
           $package->getTableName(),
           implode(' ', $join),
           '('.implode(') AND (', $where).')',
           $having);
         $packages = $package->loadAllFromArray($data);
 
         $header = pht('Search Results');
         $nodata = pht('No packages match your query.');
         break;
       case 'owned':
         $data = queryfx_all(
           $package->establishConnection('r'),
           'SELECT p.* FROM %T p JOIN %T o ON p.id = o.packageID
             WHERE o.userPHID = %s GROUP BY p.id',
           $package->getTableName(),
           $owner->getTableName(),
           $user->getPHID());
         $packages = $package->loadAllFromArray($data);
 
         $header = pht('Owned Packages');
         $nodata = pht('No owned packages');
         break;
       case 'projects':
         $projects = id(new PhabricatorProjectQuery())
           ->setViewer($user)
           ->withMemberPHIDs(array($user->getPHID()))
           ->withStatus(PhabricatorProjectQuery::STATUS_ANY)
           ->execute();
         $owner_phids = mpull($projects, 'getPHID');
         if ($owner_phids) {
           $data = queryfx_all(
             $package->establishConnection('r'),
             'SELECT p.* FROM %T p JOIN %T o ON p.id = o.packageID
               WHERE o.userPHID IN (%Ls) GROUP BY p.id',
             $package->getTableName(),
             $owner->getTableName(),
             $owner_phids);
         } else {
           $data = array();
         }
         $packages = $package->loadAllFromArray($data);
 
         $header = pht('Owned Packages');
         $nodata = pht('No owned packages');
         break;
       case 'all':
         $packages = $package->loadAll();
 
         $header = pht('All Packages');
         $nodata = pht('There are no defined packages.');
         break;
     }
 
     $content = $this->renderPackageTable(
       $packages,
       $header,
       $nodata);
 
     $filter = new AphrontListFilterView();
 
     $owners_search_value = array();
     if ($request->getArr('owner')) {
       $phids = $request->getArr('owner');
       $phid = reset($phids);
       $handles = $this->loadViewerHandles(array($phid));
       $owners_search_value = array(
         $phid => $handles[$phid]->getFullName(),
       );
     }
 
     $callsigns = array('' => pht('(Any Repository)'));
     $repositories = id(new PhabricatorRepository())
       ->loadAllWhere('1 = 1 ORDER BY callsign');
     foreach ($repositories as $repository) {
       $callsigns[$repository->getCallsign()] =
         $repository->getCallsign().': '.$repository->getName();
     }
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->setAction('/owners/view/search/')
       ->setMethod('GET')
-      ->setNoShading(true)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setName('name')
           ->setLabel(pht('Name'))
           ->setValue($request->getStr('name')))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setDatasource('/typeahead/common/usersorprojects/')
           ->setLimit(1)
           ->setName('owner')
           ->setLabel(pht('Owner'))
           ->setValue($owners_search_value))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setName('repository')
           ->setLabel(pht('Repository'))
           ->setOptions($callsigns)
           ->setValue($request->getStr('repository')))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setName('path')
           ->setLabel(pht('Path'))
           ->setValue($request->getStr('path')))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Search for Packages')));
 
     $filter->appendChild($form);
 
     $nav = $this->buildSideNavView();
     $nav->appendChild($filter);
     $nav->appendChild($content);
 
     return $this->buildApplicationPage(
       array(
         $nav,
       ),
       array(
         'title' => pht('Package Index'),
         'device' => true,
       ));
   }
 
   private function renderPackageTable(array $packages, $header, $nodata) {
     assert_instances_of($packages, 'PhabricatorOwnersPackage');
 
     if ($packages) {
       $package_ids = mpull($packages, 'getID');
 
       $owners = id(new PhabricatorOwnersOwner())->loadAllWhere(
         'packageID IN (%Ld)',
         $package_ids);
 
       $paths = id(new PhabricatorOwnersPath())->loadAllWhere(
         'packageID in (%Ld)',
         $package_ids);
 
       $phids = array();
       foreach ($owners as $owner) {
         $phids[$owner->getUserPHID()] = true;
       }
       $phids = array_keys($phids);
       $handles = $this->loadViewerHandles($phids);
 
       $repository_phids = array();
       foreach ($paths as $path) {
         $repository_phids[$path->getRepositoryPHID()] = true;
       }
 
       if ($repository_phids) {
         $repositories = id(new PhabricatorRepository())->loadAllWhere(
           'phid in (%Ls)',
           array_keys($repository_phids));
       } else {
         $repositories = array();
       }
 
       $repositories = mpull($repositories, null, 'getPHID');
       $owners       = mgroup($owners, 'getPackageID');
       $paths        = mgroup($paths, 'getPackageID');
     } else {
       $handles      = array();
       $repositories = array();
       $owners       = array();
       $paths        = array();
     }
 
     $rows = array();
     foreach ($packages as $package) {
 
       $pkg_owners = idx($owners, $package->getID(), array());
       foreach ($pkg_owners as $key => $owner) {
         $pkg_owners[$key] = $handles[$owner->getUserPHID()]->renderLink();
         if ($owner->getUserPHID() == $package->getPrimaryOwnerPHID()) {
           $pkg_owners[$key] = phutil_tag('strong', array(), $pkg_owners[$key]);
         }
       }
       $pkg_owners = phutil_implode_html(phutil_tag('br'), $pkg_owners);
 
       $pkg_paths = idx($paths, $package->getID(), array());
       foreach ($pkg_paths as $key => $path) {
         $repo = idx($repositories, $path->getRepositoryPHID());
         if ($repo) {
           $href = DiffusionRequest::generateDiffusionURI(
             array(
               'callsign' => $repo->getCallsign(),
               'branch'   => $repo->getDefaultBranch(),
               'path'     => $path->getPath(),
               'action'   => 'browse',
             ));
           $pkg_paths[$key] = hsprintf(
             '%s %s%s',
             ($path->getExcluded() ? "\xE2\x80\x93" : '+'),
             phutil_tag('strong', array(), $repo->getName()),
             phutil_tag(
               'a',
               array(
                 'href' => (string) $href,
               ),
               $path->getPath()));
         } else {
           $pkg_paths[$key] = $path->getPath();
         }
       }
       $pkg_paths = phutil_implode_html(phutil_tag('br'), $pkg_paths);
 
       $rows[] = array(
         phutil_tag(
           'a',
           array(
             'href' => '/owners/package/'.$package->getID().'/',
           ),
           $package->getName()),
         $pkg_owners,
         $pkg_paths,
         phutil_tag(
           'a',
           array(
             'href' => '/audit/view/packagecommits/?phid='.$package->getPHID(),
           ),
           pht('Related Commits'))
       );
     }
 
     $table = new AphrontTableView($rows);
     $table->setHeaders(
       array(
         pht('Name'),
         pht('Owners'),
         pht('Paths'),
         pht('Related Commits'),
       ));
     $table->setColumnClasses(
       array(
         'pri',
         '',
         'wide wrap',
         'narrow',
       ));
 
     $panel = new AphrontPanelView();
     $panel->setHeader($header);
     $panel->appendChild($table);
     $panel->setNoBackground();
 
     return $panel;
   }
 
   protected function getExtraPackageViews(AphrontSideNavFilterView $view) {
     if ($this->view == 'search') {
       $view->addFilter('view/search', pht('Search Results'));
     }
   }
 }
diff --git a/src/applications/paste/controller/PhabricatorPasteEditController.php b/src/applications/paste/controller/PhabricatorPasteEditController.php
index 1fd64e01f..78865671a 100644
--- a/src/applications/paste/controller/PhabricatorPasteEditController.php
+++ b/src/applications/paste/controller/PhabricatorPasteEditController.php
@@ -1,233 +1,234 @@
 <?php
 
 /**
  * @group paste
  */
 final class PhabricatorPasteEditController extends PhabricatorPasteController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $parent = null;
     $parent_id = null;
     if (!$this->id) {
       $is_create = true;
 
       $paste = new PhabricatorPaste();
 
       $parent_id = $request->getStr('parent');
       if ($parent_id) {
         // NOTE: If the Paste is forked from a paste which the user no longer
         // has permission to see, we still let them edit it.
         $parent = id(new PhabricatorPasteQuery())
           ->setViewer($user)
           ->withIDs(array($parent_id))
           ->needContent(true)
           ->needRawContent(true)
           ->execute();
         $parent = head($parent);
 
         if ($parent) {
           $paste->setParentPHID($parent->getPHID());
           $paste->setViewPolicy($parent->getViewPolicy());
         }
       }
 
       $paste->setAuthorPHID($user->getPHID());
     } else {
       $is_create = false;
 
       $paste = id(new PhabricatorPasteQuery())
         ->setViewer($user)
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_VIEW,
             PhabricatorPolicyCapability::CAN_EDIT,
           ))
         ->withIDs(array($this->id))
         ->executeOne();
       if (!$paste) {
         return new Aphront404Response();
       }
     }
 
     $text = null;
     $e_text = true;
     $errors = array();
     if ($is_create && $parent) {
       $v_title = pht('Fork of %s', $parent->getFullName());
       $v_language = $parent->getLanguage();
       $v_text = $parent->getRawContent();
     } else {
       $v_title = $paste->getTitle();
       $v_language = $paste->getLanguage();
       $v_text = '';
     }
     $v_policy = $paste->getViewPolicy();
 
     if ($request->isFormPost()) {
       $xactions = array();
 
       if ($is_create) {
         $v_text = $request->getStr('text');
         if (!strlen($v_text)) {
           $e_text = pht('Required');
           $errors[] = pht('The paste may not be blank.');
         } else {
           $e_text = null;
         }
      }
 
       $v_title = $request->getStr('title');
       $v_language = $request->getStr('language');
       $v_policy = $request->getStr('can_view');
 
       // NOTE: The author is the only editor and can always view the paste,
       // so it's impossible for them to choose an invalid policy.
 
       if (!$errors) {
         if ($is_create) {
           $xactions[] = id(new PhabricatorPasteTransaction())
             ->setTransactionType(PhabricatorPasteTransaction::TYPE_CREATE)
             ->setNewValue(array(
               'title' => $v_title,
               'text' => $v_text));
         }
         $xactions[] = id(new PhabricatorPasteTransaction())
           ->setTransactionType(PhabricatorPasteTransaction::TYPE_TITLE)
           ->setNewValue($v_title);
         $xactions[] = id(new PhabricatorPasteTransaction())
           ->setTransactionType(PhabricatorPasteTransaction::TYPE_LANGUAGE)
           ->setNewValue($v_language);
         $xactions[] = id(new PhabricatorPasteTransaction())
           ->setTransactionType(PhabricatorTransactions::TYPE_VIEW_POLICY)
           ->setNewValue($v_policy);
         $editor = id(new PhabricatorPasteEditor())
           ->setActor($user)
           ->setContentSourceFromRequest($request)
           ->setContinueOnNoEffect(true);
         $xactions = $editor->applyTransactions($paste, $xactions);
         return id(new AphrontRedirectResponse())->setURI($paste->getURI());
       } else {
         // make sure we update policy so its correctly populated to what
         // the user chose
         $paste->setViewPolicy($v_policy);
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('A Fatal Omission!'))
         ->setErrors($errors);
     }
 
     $form = new AphrontFormView();
-    $form->setFlexible(true);
 
     $langs = array(
       '' => pht('(Detect From Filename in Title)'),
     ) + PhabricatorEnv::getEnvConfig('pygments.dropdown-choices');
 
     $form
       ->setUser($user)
       ->addHiddenInput('parent', $parent_id)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Title'))
           ->setValue($v_title)
           ->setName('title'))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Language'))
           ->setName('language')
           ->setValue($v_language)
           ->setOptions($langs));
 
     $policies = id(new PhabricatorPolicyQuery())
       ->setViewer($user)
       ->setObject($paste)
       ->execute();
 
     $form->appendChild(
       id(new AphrontFormPolicyControl())
         ->setUser($user)
         ->setCapability(PhabricatorPolicyCapability::CAN_VIEW)
         ->setPolicyObject($paste)
         ->setPolicies($policies)
         ->setName('can_view'));
 
     if ($is_create) {
       $form
         ->appendChild(
           id(new AphrontFormTextAreaControl())
             ->setLabel(pht('Text'))
             ->setError($e_text)
             ->setValue($v_text)
             ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_TALL)
             ->setCustomClass('PhabricatorMonospaced')
             ->setName('text'));
     } else {
       $fork_link = phutil_tag(
         'a',
         array(
           'href' => $this->getApplicationURI('?parent='.$paste->getID())
         ),
         pht('Fork'));
       $form
         ->appendChild(
           id(new AphrontFormMarkupControl())
           ->setLabel(pht('Text'))
           ->setValue(pht(
             'Paste text can not be edited. %s to create a new paste.',
             $fork_link)));
     }
 
     $submit = new AphrontFormSubmitControl();
 
     if (!$is_create) {
       $submit->addCancelButton($paste->getURI());
       $submit->setValue(pht('Save Paste'));
       $title = pht('Edit %s', $paste->getFullName());
       $short = pht('Edit');
     } else {
       $submit->setValue(pht('Create Paste'));
-      $title = pht('Create Paste');
+      $title = pht('Create New Paste');
       $short = pht('Create');
     }
 
-    $form
-      ->appendChild($submit);
+    $form->appendChild($submit);
+
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($title)
+      ->setFormError($error_view)
+      ->setForm($form);
 
     $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView());
     if (!$is_create) {
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName('P'.$paste->getID())
           ->setHref('/P'.$paste->getID()));
     }
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())->setName($short));
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        id(new PhabricatorHeaderView())->setHeader($title),
-        $error_view,
-        $form,
+        $form_box,
       ),
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/people/controller/PhabricatorPeopleEditController.php b/src/applications/people/controller/PhabricatorPeopleEditController.php
index 4b060b248..0adcf3539 100644
--- a/src/applications/people/controller/PhabricatorPeopleEditController.php
+++ b/src/applications/people/controller/PhabricatorPeopleEditController.php
@@ -1,822 +1,837 @@
 <?php
 
 final class PhabricatorPeopleEditController
   extends PhabricatorPeopleController {
 
   private $id;
   private $view;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
     $this->view = idx($data, 'view');
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $admin = $request->getUser();
 
     $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView());
     if ($this->id) {
       $user = id(new PhabricatorUser())->load($this->id);
       if (!$user) {
         return new Aphront404Response();
       }
       $base_uri = '/people/edit/'.$user->getID().'/';
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht('Edit User'))
           ->setHref('/people/edit/'));
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName($user->getFullName())
           ->setHref($base_uri));
     } else {
       $user = new PhabricatorUser();
       $base_uri = '/people/edit/';
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht('Create New User'))
           ->setHref($base_uri));
     }
 
     $nav = new AphrontSideNavFilterView();
     $nav->setBaseURI(new PhutilURI($base_uri));
     $nav->addLabel(pht('User Information'));
     $nav->addFilter('basic', pht('Basic Information'));
     $nav->addFilter('role', pht('Edit Roles'));
     $nav->addFilter('cert', pht('Conduit Certificate'));
     $nav->addFilter('profile',
       pht('View Profile'), '/p/'.$user->getUsername().'/');
     $nav->addLabel(pht('Special'));
     $nav->addFilter('rename', pht('Change Username'));
     if ($user->getIsSystemAgent()) {
       $nav->addFilter('picture', pht('Set Account Picture'));
     }
     $nav->addFilter('delete', pht('Delete User'));
 
     if (!$user->getID()) {
       $this->view = 'basic';
     }
 
     $view = $nav->selectFilter($this->view, 'basic');
 
     $content = array();
 
     if ($request->getStr('saved')) {
       $notice = new AphrontErrorView();
       $notice->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
       $notice->setTitle(pht('Changes Saved'));
       $notice->appendChild(
         phutil_tag('p', array(), pht('Your changes were saved.')));
       $content[] = $notice;
     }
 
     switch ($view) {
       case 'basic':
         $response = $this->processBasicRequest($user);
         break;
       case 'role':
         $response = $this->processRoleRequest($user);
         break;
       case 'cert':
         $response = $this->processCertificateRequest($user);
         break;
       case 'rename':
         $response = $this->processRenameRequest($user);
         break;
       case 'picture':
         $response = $this->processSetAccountPicture($user);
         break;
       case 'delete':
         $response = $this->processDeleteRequest($user);
         break;
       default:
         return new Aphront404Response();
     }
 
     if ($response instanceof AphrontResponse) {
       return $response;
     }
 
     $content[] = $response;
 
     if ($user->getID()) {
       $nav->appendChild($content);
     } else {
       $nav = $this->buildSideNavView();
       $nav->selectFilter('edit');
       $nav->appendChild($content);
     }
 
     $nav->setCrumbs($crumbs);
     return $this->buildApplicationPage(
       $nav,
       array(
         'title' => pht('Edit User'),
         'device' => true,
       ));
   }
 
   private function processBasicRequest(PhabricatorUser $user) {
     $request = $this->getRequest();
     $admin = $request->getUser();
 
     $e_username = true;
     $e_realname = true;
     $e_email    = true;
     $errors = array();
 
     $welcome_checked = true;
 
     $new_email = null;
 
     $request = $this->getRequest();
     if ($request->isFormPost()) {
       $welcome_checked = $request->getInt('welcome');
       $is_new = !$user->getID();
 
       if ($is_new) {
         $user->setUsername($request->getStr('username'));
 
         $new_email = $request->getStr('email');
         if (!strlen($new_email)) {
           $errors[] = pht('Email is required.');
           $e_email = pht('Required');
         } else if (!PhabricatorUserEmail::isAllowedAddress($new_email)) {
           $e_email = pht('Invalid');
           $errors[] = PhabricatorUserEmail::describeAllowedAddresses();
         } else {
           $e_email = null;
         }
 
       }
       $user->setRealName($request->getStr('realname'));
 
       if (!strlen($user->getUsername())) {
         $errors[] = pht("Username is required.");
         $e_username = pht('Required');
       } else if (!PhabricatorUser::validateUsername($user->getUsername())) {
         $errors[] = PhabricatorUser::describeValidUsername();
         $e_username = pht('Invalid');
       } else {
         $e_username = null;
       }
 
       if (!strlen($user->getRealName())) {
         $errors[] = pht('Real name is required.');
         $e_realname = pht('Required');
       } else {
         $e_realname = null;
       }
 
       if (!$errors) {
         try {
 
           if (!$is_new) {
             id(new PhabricatorUserEditor())
               ->setActor($admin)
               ->updateUser($user);
           } else {
             $email = id(new PhabricatorUserEmail())
               ->setAddress($new_email)
               ->setIsVerified(0);
 
             id(new PhabricatorUserEditor())
               ->setActor($admin)
               ->createNewUser($user, $email);
 
             if ($request->getStr('role') == 'agent') {
               id(new PhabricatorUserEditor())
                 ->setActor($admin)
                 ->makeSystemAgentUser($user, true);
             }
 
           }
 
           if ($welcome_checked) {
             $user->sendWelcomeEmail($admin);
           }
 
           $response = id(new AphrontRedirectResponse())
             ->setURI('/people/edit/'.$user->getID().'/?saved=true');
           return $response;
         } catch (AphrontQueryDuplicateKeyException $ex) {
           $errors[] = pht('Username and email must be unique.');
 
           $same_username = id(new PhabricatorUser())
             ->loadOneWhere('username = %s', $user->getUsername());
           $same_email = id(new PhabricatorUserEmail())
             ->loadOneWhere('address = %s', $new_email);
 
           if ($same_username) {
             $e_username = pht('Duplicate');
           }
 
           if ($same_email) {
             $e_email = pht('Duplicate');
           }
         }
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Form Errors'))
         ->setErrors($errors);
     }
 
     $form = new AphrontFormView();
     $form->setUser($admin);
     if ($user->getID()) {
       $form->setAction('/people/edit/'.$user->getID().'/');
     } else {
       $form->setAction('/people/edit/');
     }
 
     if ($user->getID()) {
       $is_immutable = true;
     } else {
       $is_immutable = false;
     }
 
     $form
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Username'))
           ->setName('username')
           ->setValue($user->getUsername())
           ->setError($e_username)
           ->setDisabled($is_immutable))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Real Name'))
           ->setName('realname')
           ->setValue($user->getRealName())
           ->setError($e_realname));
 
     if (!$user->getID()) {
       $form->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Email'))
           ->setName('email')
           ->setDisabled($is_immutable)
           ->setValue($new_email)
           ->setCaption(PhabricatorUserEmail::describeAllowedAddresses())
           ->setError($e_email));
     } else {
       $email = $user->loadPrimaryEmail();
       if ($email) {
         $status = $email->getIsVerified() ?
           pht('Verified') : pht('Unverified');
       } else {
         $status = pht('No Email Address');
       }
 
       $form->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel(pht('Email'))
           ->setValue($status));
 
       $form->appendChild(
         id(new AphrontFormCheckboxControl())
         ->addCheckbox(
           'welcome',
           1,
           pht('Re-send "Welcome to Phabricator" email.'),
           false));
 
     }
 
     $form->appendChild($this->getRoleInstructions());
 
     if (!$user->getID()) {
       $form
         ->appendChild(
           id(new AphrontFormSelectControl())
             ->setLabel(pht('Role'))
             ->setName('role')
             ->setValue('user')
             ->setOptions(
               array(
                 'user'  => pht('Normal User'),
                 'agent' => pht('System Agent'),
               ))
             ->setCaption(
               pht('You can create a "system agent" account for bots, '.
               'scripts, etc.')))
         ->appendChild(
           id(new AphrontFormCheckboxControl())
             ->addCheckbox(
               'welcome',
               1,
               pht('Send "Welcome to Phabricator" email.'),
               $welcome_checked));
     } else {
       $roles = array();
 
       if ($user->getIsSystemAgent()) {
         $roles[] = pht('System Agent');
       }
       if ($user->getIsAdmin()) {
         $roles[] = pht('Admin');
       }
       if ($user->getIsDisabled()) {
         $roles[] = pht('Disabled');
       }
 
       if (!$roles) {
         $roles[] = pht('Normal User');
       }
 
       $roles = implode(', ', $roles);
 
       $form->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel(pht('Roles'))
           ->setValue($roles));
     }
 
     $form
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Save')));
 
-    $header = new PhabricatorHeaderView();
     if ($user->getID()) {
-      $header->setHeader(pht('Edit User'));
+      $title = pht('Edit User');
     } else {
-      $header->setHeader(pht('Create New User'));
+      $title = pht('Create New User');
     }
 
-    return array($error_view, $form);
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($title)
+      ->setFormError($error_view)
+      ->setForm($form);
+
+    return array($form_box);
   }
 
   private function processRoleRequest(PhabricatorUser $user) {
     $request = $this->getRequest();
     $admin = $request->getUser();
 
     $is_self = ($user->getID() == $admin->getID());
 
     $errors = array();
 
     if ($request->isFormPost()) {
 
       $log_template = PhabricatorUserLog::newLog(
         $admin,
         $user,
         null);
 
       $logs = array();
 
       if ($is_self) {
         $errors[] = pht("You can not edit your own role.");
       } else {
         $new_admin = (bool)$request->getBool('is_admin');
         $old_admin = (bool)$user->getIsAdmin();
         if ($new_admin != $old_admin) {
           id(new PhabricatorUserEditor())
             ->setActor($admin)
             ->makeAdminUser($user, $new_admin);
         }
 
         $new_disabled = (bool)$request->getBool('is_disabled');
         $old_disabled = (bool)$user->getIsDisabled();
         if ($new_disabled != $old_disabled) {
           id(new PhabricatorUserEditor())
             ->setActor($admin)
             ->disableUser($user, $new_disabled);
         }
       }
 
       if (!$errors) {
         return id(new AphrontRedirectResponse())
           ->setURI($request->getRequestURI()->alter('saved', 'true'));
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Form Errors'))
         ->setErrors($errors);
     }
 
 
     $form = id(new AphrontFormView())
       ->setUser($admin)
       ->setAction($request->getRequestURI()->alter('saved', null));
 
     if ($is_self) {
       $inst = pht('NOTE: You can not edit your own role.');
       $form->appendChild(hsprintf(
         '<p class="aphront-form-instructions">%s</p>', $inst));
     }
 
     $form
       ->appendChild($this->getRoleInstructions())
       ->appendChild(
         id(new AphrontFormCheckboxControl())
           ->addCheckbox(
             'is_admin',
             1,
             pht('Administrator'),
             $user->getIsAdmin())
           ->setDisabled($is_self))
       ->appendChild(
         id(new AphrontFormCheckboxControl())
           ->addCheckbox(
             'is_disabled',
             1,
             pht('Disabled'),
             $user->getIsDisabled())
           ->setDisabled($is_self))
       ->appendChild(
         id(new AphrontFormCheckboxControl())
           ->addCheckbox(
             'is_agent',
             1,
             pht('System Agent (Bot/Script User)'),
             $user->getIsSystemAgent())
           ->setDisabled(true));
 
     if (!$is_self) {
       $form
         ->appendChild(
           id(new AphrontFormSubmitControl())
             ->setValue(pht('Edit Role')));
     }
 
-    $header = new PhabricatorHeaderView();
-    $header->setHeader(pht('Edit Role'));
+    $title = pht('Edit Role');
+
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($title)
+      ->setFormError($error_view)
+      ->setForm($form);
 
-    return array($error_view, $header, $form);
+    return array($form_box);
   }
 
   private function processCertificateRequest($user) {
     $request = $this->getRequest();
     $admin = $request->getUser();
 
     $inst = pht('You can use this certificate '.
         'to write scripts or bots which interface with Phabricator over '.
         'Conduit.');
     $form = new AphrontFormView();
     $form
       ->setUser($admin)
       ->setAction($request->getRequestURI())
       ->appendChild(hsprintf(
         '<p class="aphront-form-instructions">%s</p>', $inst));
 
     if ($user->getIsSystemAgent()) {
       $form
         ->appendChild(
           id(new AphrontFormTextControl())
             ->setLabel(pht('Username'))
             ->setValue($user->getUsername()))
         ->appendChild(
           id(new AphrontFormTextAreaControl())
             ->setLabel(pht('Certificate'))
             ->setValue($user->getConduitCertificate()));
     } else {
       $form->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel(pht('Certificate'))
           ->setValue(
             pht('You may only view the certificates of System Agents.')));
     }
 
-    $header = new PhabricatorHeaderView();
-    $header->setHeader(pht('Conduit Certificate'));
+    $title = pht('Conduit Certificate');
+
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($title)
+      ->setForm($form);
 
-    return array($header, $form);
+    return array($form_box);
   }
 
   private function processRenameRequest(PhabricatorUser $user) {
     $request = $this->getRequest();
     $admin = $request->getUser();
 
     $e_username = true;
     $username = $user->getUsername();
 
     $errors = array();
     if ($request->isFormPost()) {
 
       $username = $request->getStr('username');
       if (!strlen($username)) {
         $e_username = pht('Required');
         $errors[] = pht('New username is required.');
       } else if ($username == $user->getUsername()) {
         $e_username = pht('Invalid');
         $errors[] = pht('New username must be different from old username.');
       } else if (!PhabricatorUser::validateUsername($username)) {
         $e_username = pht('Invalid');
         $errors[] = PhabricatorUser::describeValidUsername();
       }
 
       if (!$errors) {
         try {
 
           id(new PhabricatorUserEditor())
             ->setActor($admin)
             ->changeUsername($user, $username);
 
           return id(new AphrontRedirectResponse())
             ->setURI($request->getRequestURI()->alter('saved', true));
         } catch (AphrontQueryDuplicateKeyException $ex) {
           $e_username = pht('Not Unique');
           $errors[] = pht('Another user already has that username.');
         }
       }
     }
 
     if ($errors) {
       $errors = id(new AphrontErrorView())
         ->setTitle(pht('Form Errors'))
         ->setErrors($errors);
     } else {
       $errors = null;
     }
 
     $inst1 = pht('Be careful when renaming users!');
     $inst2 = pht('The old username will no longer be tied to the user, so '.
           'anything which uses it (like old commit messages) will no longer '.
           'associate correctly. And if you give a user a username which some '.
           'other user used to have, username lookups will begin returning '.
           'the wrong user.');
     $inst3 = pht('It is generally safe to rename newly created users (and '.
           'test users and so on), but less safe to rename established users '.
           'and unsafe to reissue a username.');
     $inst4 = pht('Users who rely on password auth will need to reset their '.
           'passwordafter their username is changed (their username is part '.
           'of the salt in the password hash). They will receive an email '.
           'with instructions on how to do this.');
 
     $form = new AphrontFormView();
     $form
       ->setUser($admin)
       ->setAction($request->getRequestURI())
       ->appendChild(hsprintf(
         '<p class="aphront-form-instructions">'.
           '<strong>%s</strong> '.
           '%s'.
         '</p>'.
         '<p class="aphront-form-instructions">'.
           '%s'.
         '</p>'.
         '<p class="aphront-form-instructions">'.
           '%s'.
         '</p>', $inst1, $inst2, $inst3, $inst4))
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel(pht('Old Username'))
           ->setValue($user->getUsername()))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('New Username'))
           ->setValue($username)
           ->setName('username')
           ->setError($e_username))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Change Username')));
 
-    $header = new PhabricatorHeaderView();
-    $header->setHeader(pht('Change Username'));
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Change Username'))
+      ->setFormError($errors)
+      ->setForm($form);
 
-    return array($errors, $header, $form);
+    return array($form_box);
   }
 
   private function processDeleteRequest(PhabricatorUser $user) {
     $request = $this->getRequest();
     $admin = $request->getUser();
 
     $far1 = pht('As you stare into the gaping maw of the abyss, something '.
         'hold you back.');
     $far2 = pht('You can not delete your own account.');
 
     if ($user->getPHID() == $admin->getPHID()) {
       $error = new AphrontErrorView();
       $error->setTitle(pht('You Shall Journey No Farther'));
       $error->appendChild(hsprintf(
         '<p>%s</p><p>%s</p>', $far1, $far2));
       return $error;
     }
 
     $e_username = true;
     $username = null;
 
     $errors = array();
     if ($request->isFormPost()) {
 
       $username = $request->getStr('username');
       if (!strlen($username)) {
         $e_username = pht('Required');
         $errors[] = pht('You must type the username to confirm deletion.');
       } else if ($username != $user->getUsername()) {
         $e_username = pht('Invalid');
         $errors[] = pht('You must type the username correctly.');
       }
 
       if (!$errors) {
         id(new PhabricatorUserEditor())
           ->setActor($admin)
           ->deleteUser($user);
 
         return id(new AphrontRedirectResponse())->setURI('/people/');
       }
     }
 
     if ($errors) {
       $errors = id(new AphrontErrorView())
         ->setTitle(pht('Form Errors'))
         ->setErrors($errors);
     } else {
       $errors = null;
     }
 
     $str1 = pht('Be careful when deleting users!');
     $str2 = pht('If this user interacted with anything, it is generally '.
         'better to disable them, not delete them. If you delete them, it will '.
         'no longer be possible to search for their objects, for example, '.
         'and you will lose other information about their history. Disabling '.
         'them instead will prevent them from logging in but not destroy '.
         'any of their data.');
     $str3 = pht('It is generally safe to delete newly created users (and '.
           'test users and so on), but less safe to delete established users. '.
           'If possible, disable them instead.');
 
     $form = new AphrontFormView();
     $form
       ->setUser($admin)
       ->setAction($request->getRequestURI())
       ->appendChild(hsprintf(
         '<p class="aphront-form-instructions">'.
           '<strong>%s</strong> %s'.
         '</p>'.
         '<p class="aphront-form-instructions">'.
           '%s'.
         '</p>', $str1, $str2, $str3))
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel(pht('Username'))
           ->setValue($user->getUsername()))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Confirm'))
           ->setValue($username)
           ->setName('username')
           ->setCaption(pht("Type the username again to confirm deletion."))
           ->setError($e_username))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Delete User')));
 
-    $header = new PhabricatorHeaderView();
-    $header->setHeader(pht('Delete User'));
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Delete User'))
+      ->setFormError($errors)
+      ->setForm($form);
 
-    return array($errors, $header, $form);
+    return array($form_box);
   }
 
   private function getRoleInstructions() {
     $roles_link = phutil_tag(
       'a',
       array(
         'href'   => PhabricatorEnv::getDoclink(
           'article/User_Guide_Account_Roles.html'),
         'target' => '_blank',
       ),
       pht('User Guide: Account Roles'));
 
     $inst = pht('For a detailed explanation of account roles, see %s.',
       $roles_link);
     return hsprintf(
       '<p class="aphront-form-instructions">%s</p>',
       $inst);
   }
 
   private function processSetAccountPicture(PhabricatorUser $user) {
     $request = $this->getRequest();
     $admin = $request->getUser();
 
     $profile = $user->loadUserProfile();
     if (!$profile->getID()) {
       $profile->setTitle('');
       $profile->setBlurb('');
     }
 
 
 
     $supported_formats = PhabricatorFile::getTransformableImageFormats();
 
     $e_image = null;
     $errors = array();
 
     if ($request->isFormPost()) {
       $default_image = $request->getExists('default_image');
 
       if ($default_image) {
         $profile->setProfileImagePHID(null);
         $user->setProfileImagePHID(null);
       } else if ($request->getFileExists('image')) {
         $file = null;
         $file = PhabricatorFile::newFromPHPUpload(
           $_FILES['image'],
           array(
             'authorPHID' => $admin->getPHID(),
           ));
 
         $okay = $file->isTransformableImage();
 
         if ($okay) {
           $xformer = new PhabricatorImageTransformer();
 
           // Generate the large picture for the profile page.
           $large_xformed = $xformer->executeProfileTransform(
             $file,
             $width = 280,
             $min_height = 140,
             $max_height = 420);
           $profile->setProfileImagePHID($large_xformed->getPHID());
 
           // Generate the small picture for comments, etc.
           $small_xformed = $xformer->executeProfileTransform(
             $file,
             $width = 50,
             $min_height = 50,
             $max_height = 50);
           $user->setProfileImagePHID($small_xformed->getPHID());
         } else {
           $e_image = pht('Not Supported');
           $errors[] =
             pht('This server only supports these image formats:').
               ' ' .implode(', ', $supported_formats);
         }
       }
 
      if (!$errors) {
        $user->save();
        $profile->save();
         $response = id(new AphrontRedirectResponse())
           ->setURI('/people/edit/'.$user->getID().'/picture/');
         return $response;
       }
     }
 
 
     $error_view = null;
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setTitle(pht('Form Errors'));
       $error_view->setErrors($errors);
     } else {
       if ($request->getStr('saved')) {
         $error_view = new AphrontErrorView();
         $error_view->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
         $error_view->setTitle(pht('Changes Saved'));
         $error_view->appendChild(
           phutil_tag('p', array(), pht('Your changes have been saved.')));
         $error_view = $error_view->render();
       }
     }
 
     $img_src = $user->loadProfileImageURI();
 
     $form = new AphrontFormView();
     $form
       ->setUser($admin)
       ->setAction($request->getRequestURI())
       ->setEncType('multipart/form-data')
       ->appendChild(
         id(new AphrontFormMarkupControl())
           ->setLabel(pht('Profile Image'))
           ->setValue(
             phutil_tag(
               'img',
               array(
                 'src' => $img_src,
               ))))
       ->appendChild(
         id(new AphrontFormImageControl())
           ->setLabel(pht('Change Image'))
           ->setName('image')
           ->setError($e_image)
           ->setCaption(
             pht('Supported formats: %s', implode(', ', $supported_formats))));
 
       $form->appendChild(
       id(new AphrontFormSubmitControl())
         ->setValue(pht('Save'))
         ->addCancelButton('/people/edit/'.$user->getID().'/'));
 
     $panel = new AphrontPanelView();
     $panel->setHeader(pht('Set Profile Picture'));
     $panel->setWidth(AphrontPanelView::WIDTH_FORM);
     $panel->setNoBackground();
     $panel->appendChild($form);
 
     return array($error_view, $panel);
 
   }
 
 }
diff --git a/src/applications/people/controller/PhabricatorPeopleProfileEditController.php b/src/applications/people/controller/PhabricatorPeopleProfileEditController.php
index 30efa9107..675512c63 100644
--- a/src/applications/people/controller/PhabricatorPeopleProfileEditController.php
+++ b/src/applications/people/controller/PhabricatorPeopleProfileEditController.php
@@ -1,87 +1,91 @@
 <?php
 
 final class PhabricatorPeopleProfileEditController
   extends PhabricatorPeopleController {
 
   private $id;
 
   public function shouldRequireAdmin() {
     return false;
   }
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $viewer = $request->getUser();
 
     $user = id(new PhabricatorPeopleQuery())
       ->setViewer($viewer)
       ->withIDs(array($this->id))
       ->requireCapabilities(
         array(
           PhabricatorPolicyCapability::CAN_VIEW,
           PhabricatorPolicyCapability::CAN_EDIT,
         ))
       ->executeOne();
     if (!$user) {
       return new Aphront404Response();
     }
 
     $profile_uri = '/p/'.$user->getUsername().'/';
 
     $field_list = PhabricatorCustomField::getObjectFields(
       $user,
       PhabricatorCustomField::ROLE_EDIT);
     $field_list->readFieldsFromStorage($user);
 
     if ($request->isFormPost()) {
       $xactions = $field_list->buildFieldTransactionsFromRequest(
         new PhabricatorUserTransaction(),
         $request);
 
       $editor = id(new PhabricatorUserProfileEditor())
         ->setActor($viewer)
         ->setContentSource(
           PhabricatorContentSource::newFromRequest($request))
         ->setContinueOnNoEffect(true);
 
       $editor->applyTransactions($user, $xactions);
 
       return id(new AphrontRedirectResponse())->setURI($profile_uri);
     }
 
     $title = pht('Edit Profile');
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($user->getUsername())
         ->setHref($profile_uri));
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($title));
 
     $form = id(new AphrontFormView())
       ->setUser($viewer);
 
     $field_list->appendFieldsToForm($form);
 
     $form
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton($profile_uri)
           ->setValue(pht('Save Profile')));
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Edit Your Profile'))
+      ->setForm($form);
+
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $form,
+        $form_box,
       ),
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 }
diff --git a/src/applications/people/controller/PhabricatorPeopleProfilePictureController.php b/src/applications/people/controller/PhabricatorPeopleProfilePictureController.php
index 0631e5fe1..7c3ffe2b2 100644
--- a/src/applications/people/controller/PhabricatorPeopleProfilePictureController.php
+++ b/src/applications/people/controller/PhabricatorPeopleProfilePictureController.php
@@ -1,299 +1,298 @@
 <?php
 
 final class PhabricatorPeopleProfilePictureController
   extends PhabricatorPeopleController {
 
   private $id;
 
   public function shouldRequireAdmin() {
     return false;
   }
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $viewer = $request->getUser();
 
     $user = id(new PhabricatorPeopleQuery())
       ->setViewer($viewer)
       ->withIDs(array($this->id))
       ->requireCapabilities(
         array(
           PhabricatorPolicyCapability::CAN_VIEW,
           PhabricatorPolicyCapability::CAN_EDIT,
         ))
       ->executeOne();
     if (!$user) {
       return new Aphront404Response();
     }
 
     $profile_uri = '/p/'.$user->getUsername().'/';
 
     $supported_formats = PhabricatorFile::getTransformableImageFormats();
     $e_file = true;
     $errors = array();
 
     if ($request->isFormPost()) {
       $phid = $request->getStr('phid');
       $is_default = false;
       if ($phid == PhabricatorPHIDConstants::PHID_VOID) {
         $phid = null;
         $is_default = true;
       } else if ($phid) {
         $file = id(new PhabricatorFileQuery())
           ->setViewer($viewer)
           ->withPHIDs(array($phid))
           ->executeOne();
       } else {
         if ($request->getFileExists('picture')) {
           $file = PhabricatorFile::newFromPHPUpload(
             $_FILES['picture'],
             array(
               'authorPHID' => $viewer->getPHID(),
             ));
         } else {
           $e_file = pht('Required');
           $errors[] = pht(
             'You must choose a file when uploading a new profile picture.');
         }
       }
 
       if (!$errors && !$is_default) {
         if (!$file->isTransformableImage()) {
           $e_file = pht('Not Supported');
           $errors[] = pht(
             'This server only supports these image formats: %s.',
             implode(', ', $supported_formats));
         } else {
           $xformer = new PhabricatorImageTransformer();
           $xformed = $xformer->executeProfileTransform(
             $file,
             $width = 50,
             $min_height = 50,
             $max_height = 50);
         }
       }
 
       if (!$errors) {
         if ($is_default) {
           $user->setProfileImagePHID(null);
         } else {
           $user->setProfileImagePHID($xformed->getPHID());
         }
         $user->save();
         return id(new AphrontRedirectResponse())->setURI($profile_uri);
       }
     }
 
     $title = pht('Edit Profile Picture');
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($user->getUsername())
         ->setHref($profile_uri));
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($title));
 
-    $form = id(new AphrontFormLayoutView())
+    $form = id(new PHUIFormLayoutView())
       ->setUser($viewer);
 
     $default_image = PhabricatorFile::loadBuiltin($viewer, 'profile.png');
 
     $images = array();
 
     $current = $user->getProfileImagePHID();
     $has_current = false;
     if ($current) {
       $files = id(new PhabricatorFileQuery())
         ->setViewer($viewer)
         ->withPHIDs(array($current))
         ->execute();
       if ($files) {
         $file = head($files);
         if ($file->isTransformableImage()) {
           $has_current = true;
           $images[$current] = array(
             'uri' => $file->getBestURI(),
             'tip' => pht('Current Picture'),
           );
         }
       }
     }
 
     // Try to add external account images for any associated external accounts.
     $accounts = id(new PhabricatorExternalAccountQuery())
       ->setViewer($viewer)
       ->withUserPHIDs(array($user->getPHID()))
       ->needImages(true)
       ->execute();
 
     foreach ($accounts as $account) {
       $file = $account->getProfileImageFile();
       if ($account->getProfileImagePHID() != $file->getPHID()) {
         // This is a default image, just skip it.
         continue;
       }
 
       $provider = PhabricatorAuthProvider::getEnabledProviderByKey(
         $account->getProviderKey());
       if ($provider) {
         $tip = pht('Picture From %s', $provider->getProviderName());
       } else {
         $tip = pht('Picture From External Account');
       }
 
       if ($file->isTransformableImage()) {
         $images[$file->getPHID()] = array(
           'uri' => $file->getBestURI(),
           'tip' => $tip,
         );
       }
     }
 
     // Try to add Gravatar images for any email addresses associated with the
     // account.
     if (PhabricatorEnv::getEnvConfig('security.allow-outbound-http')) {
       $emails = id(new PhabricatorUserEmail())->loadAllWhere(
         'userPHID = %s ORDER BY address',
         $viewer->getPHID());
 
       $futures = array();
       foreach ($emails as $email_object) {
         $email = $email_object->getAddress();
 
         $hash = md5(strtolower(trim($email)));
         $uri = id(new PhutilURI("https://secure.gravatar.com/avatar/{$hash}"))
           ->setQueryParams(
             array(
               'size' => 200,
               'default' => '404',
               'rating' => 'x',
             ));
         $futures[$email] = new HTTPSFuture($uri);
       }
 
       $unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
       foreach (Futures($futures) as $email => $future) {
         try {
           list($body) = $future->resolvex();
           $file = PhabricatorFile::newFromFileData(
             $body,
             array(
               'name' => 'profile-gravatar',
               'ttl'  => (60 * 60 * 4),
             ));
           if ($file->isTransformableImage()) {
             $images[$file->getPHID()] = array(
               'uri' => $file->getBestURI(),
               'tip' => pht('Gravatar for %s', $email),
             );
           }
         } catch (Exception $ex) {
           // Just continue.
         }
       }
       unset($unguarded);
     }
 
     $images[PhabricatorPHIDConstants::PHID_VOID] = array(
       'uri' => $default_image->getBestURI(),
       'tip' => pht('Default Picture'),
     );
 
     require_celerity_resource('people-profile-css');
     Javelin::initBehavior('phabricator-tooltips', array());
 
     $buttons = array();
     foreach ($images as $phid => $spec) {
       $button = javelin_tag(
         'button',
         array(
           'class' => 'grey profile-image-button',
           'sigil' => 'has-tooltip',
           'meta' => array(
             'tip' => $spec['tip'],
             'size' => 300,
           ),
         ),
         phutil_tag(
           'img',
           array(
             'height' => 50,
             'width' => 50,
             'src' => $spec['uri'],
           )));
 
       $button = array(
         phutil_tag(
           'input',
           array(
             'type'  => 'hidden',
             'name'  => 'phid',
             'value' => $phid,
           )),
         $button);
 
       $button = phabricator_form(
         $viewer,
         array(
           'class' => 'profile-image-form',
           'method' => 'POST',
         ),
         $button);
 
       $buttons[] = $button;
     }
 
     if ($has_current) {
       $form->appendChild(
         id(new AphrontFormMarkupControl())
           ->setLabel(pht('Current Picture'))
           ->setValue(array_shift($buttons)));
     }
 
     $form->appendChild(
       id(new AphrontFormMarkupControl())
         ->setLabel(pht('Use Picture'))
         ->setValue($buttons));
 
     $upload_head = id(new PhabricatorHeaderView())
       ->setHeader(pht('Upload New Picture'));
 
     $upload_form = id(new AphrontFormView())
       ->setUser($user)
-      ->setFlexible(true)
       ->setEncType('multipart/form-data')
       ->appendChild(
         id(new AphrontFormFileControl())
           ->setName('picture')
           ->setLabel(pht('Upload Picture'))
           ->setError($e_file)
           ->setCaption(
             pht('Supported formats: %s', implode(', ', $supported_formats))))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton($profile_uri)
           ->setValue(pht('Upload Picture')));
 
     if ($errors) {
       $errors = id(new AphrontErrorView())->setErrors($errors);
     }
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
         $errors,
         $form,
         $upload_head,
         $upload_form,
       ),
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 }
diff --git a/src/applications/phame/controller/blog/PhameBlogDeleteController.php b/src/applications/phame/controller/blog/PhameBlogDeleteController.php
index 429068108..e6d9b4dff 100644
--- a/src/applications/phame/controller/blog/PhameBlogDeleteController.php
+++ b/src/applications/phame/controller/blog/PhameBlogDeleteController.php
@@ -1,51 +1,50 @@
 <?php
 
 /**
  * @group phame
  */
 final class PhameBlogDeleteController extends PhameController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $blog = id(new PhameBlogQuery())
       ->setViewer($user)
       ->withIDs(array($this->id))
       ->requireCapabilities(
         array(
           PhabricatorPolicyCapability::CAN_EDIT,
         ))
       ->executeOne();
     if (!$blog) {
       return new Aphront404Response();
     }
 
     if ($request->isFormPost()) {
       $blog->delete();
       return id(new AphrontRedirectResponse())
         ->setURI($this->getApplicationURI());
     }
 
     $cancel_uri = $this->getApplicationURI('/blog/view/'.$blog->getID().'/');
 
     $dialog = id(new AphrontDialogView())
       ->setUser($user)
       ->setTitle(pht('Delete Blog?'))
-      ->setHeaderColor(PhabricatorActionHeaderView::HEADER_RED)
       ->appendChild(
         pht(
           'Really delete the blog "%s"? It will be gone forever.',
           $blog->getName()))
       ->addSubmitButton(pht('Delete'))
       ->addCancelButton($cancel_uri);
 
     return id(new AphrontDialogResponse())->setDialog($dialog);
   }
 }
diff --git a/src/applications/phame/controller/blog/PhameBlogEditController.php b/src/applications/phame/controller/blog/PhameBlogEditController.php
index 133632b45..58a6725e4 100644
--- a/src/applications/phame/controller/blog/PhameBlogEditController.php
+++ b/src/applications/phame/controller/blog/PhameBlogEditController.php
@@ -1,196 +1,199 @@
 <?php
 
 /**
  * @group phame
  */
 final class PhameBlogEditController
   extends PhameController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     if ($this->id) {
       $blog = id(new PhameBlogQuery())
         ->setViewer($user)
         ->withIDs(array($this->id))
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_EDIT
           ))
         ->executeOne();
       if (!$blog) {
         return new Aphront404Response();
       }
 
       $submit_button = pht('Save Changes');
       $page_title = pht('Edit Blog');
       $cancel_uri = $this->getApplicationURI('blog/view/'.$blog->getID().'/');
     } else {
       $blog = id(new PhameBlog())
         ->setCreatorPHID($user->getPHID());
 
       $blog->setViewPolicy(PhabricatorPolicies::POLICY_USER);
       $blog->setEditPolicy(PhabricatorPolicies::POLICY_USER);
       $blog->setJoinPolicy(PhabricatorPolicies::POLICY_USER);
 
       $submit_button = pht('Create Blog');
       $page_title = pht('Create Blog');
       $cancel_uri = $this->getApplicationURI();
     }
 
     $e_name          = true;
     $e_custom_domain = null;
     $errors          = array();
 
     if ($request->isFormPost()) {
       $name          = $request->getStr('name');
       $description   = $request->getStr('description');
       $custom_domain = $request->getStr('custom_domain');
       $skin          = $request->getStr('skin');
 
       if (empty($name)) {
         $errors[] = pht('You must give the blog a name.');
         $e_name = pht('Required');
       } else {
         $e_name = null;
       }
 
       $blog->setName($name);
       $blog->setDescription($description);
       $blog->setDomain(nonempty($custom_domain, null));
       $blog->setSkin($skin);
 
       if (!empty($custom_domain)) {
         $error = $blog->validateCustomDomain($custom_domain);
         if ($error) {
           $errors[] = $error;
           $e_custom_domain = pht('Invalid');
         }
       }
 
       $blog->setViewPolicy($request->getStr('can_view'));
       $blog->setEditPolicy($request->getStr('can_edit'));
       $blog->setJoinPolicy($request->getStr('can_join'));
 
       // Don't let users remove their ability to edit blogs.
       PhabricatorPolicyFilter::mustRetainCapability(
         $user,
         $blog,
         PhabricatorPolicyCapability::CAN_EDIT);
 
       if (!$errors) {
         try {
           $blog->save();
           return id(new AphrontRedirectResponse())
             ->setURI($this->getApplicationURI('blog/view/'.$blog->getID().'/'));
         } catch (AphrontQueryDuplicateKeyException $ex) {
           $errors[] = pht('Domain must be unique.');
           $e_custom_domain = pht('Not Unique');
         }
       }
     }
 
     $policies = id(new PhabricatorPolicyQuery())
       ->setViewer($user)
       ->setObject($blog)
       ->execute();
 
     $skins = PhameSkinSpecification::loadAllSkinSpecifications();
     $skins = mpull($skins, 'getName');
 
     $form = id(new AphrontFormView())
       ->setUser($user)
-      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel(pht('Name'))
         ->setName('name')
         ->setValue($blog->getName())
         ->setID('blog-name')
         ->setError($e_name))
       ->appendChild(
         id(new PhabricatorRemarkupControl())
         ->setLabel(pht('Description'))
         ->setName('description')
         ->setValue($blog->getDescription())
         ->setID('blog-description')
         ->setUser($user)
         ->setDisableMacros(true))
       ->appendChild(
         id(new AphrontFormPolicyControl())
           ->setUser($user)
           ->setCapability(PhabricatorPolicyCapability::CAN_VIEW)
           ->setPolicyObject($blog)
           ->setPolicies($policies)
           ->setName('can_view'))
       ->appendChild(
         id(new AphrontFormPolicyControl())
           ->setUser($user)
           ->setCapability(PhabricatorPolicyCapability::CAN_EDIT)
           ->setPolicyObject($blog)
           ->setPolicies($policies)
           ->setName('can_edit'))
       ->appendChild(
         id(new AphrontFormPolicyControl())
           ->setUser($user)
           ->setCapability(PhabricatorPolicyCapability::CAN_JOIN)
           ->setPolicyObject($blog)
           ->setPolicies($policies)
           ->setName('can_join'))
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel(pht('Custom Domain'))
         ->setName('custom_domain')
         ->setValue($blog->getDomain())
         ->setCaption(
           pht('Must include at least one dot (.), e.g. blog.example.com'))
         ->setError($e_custom_domain))
       ->appendChild(
         id(new AphrontFormSelectControl())
         ->setLabel(pht('Skin'))
         ->setName('skin')
         ->setValue($blog->getSkin())
         ->setOptions($skins))
       ->appendChild(
         id(new AphrontFormSubmitControl())
         ->addCancelButton($cancel_uri)
         ->setValue($submit_button));
 
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Form Errors'))
         ->setErrors($errors);
     } else {
       $error_view = null;
     }
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($page_title)
+      ->setFormError($error_view)
+      ->setForm($form);
+
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($page_title)
         ->setHref($this->getApplicationURI('blog/new')));
 
     $nav = $this->renderSideNavFilterView();
     $nav->selectFilter($this->id ? null : 'blog/new');
     $nav->appendChild(
       array(
         $crumbs,
-        $error_view,
-        $form,
+        $form_box,
       ));
 
     return $this->buildApplicationPage(
       $nav,
       array(
         'title' => $page_title,
         'device' => true,
       ));
   }
 }
diff --git a/src/applications/phame/controller/post/PhamePostDeleteController.php b/src/applications/phame/controller/post/PhamePostDeleteController.php
index 6baa5fe8e..8faa715a5 100644
--- a/src/applications/phame/controller/post/PhamePostDeleteController.php
+++ b/src/applications/phame/controller/post/PhamePostDeleteController.php
@@ -1,51 +1,50 @@
 <?php
 
 /**
  * @group phame
  */
 final class PhamePostDeleteController extends PhameController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $post = id(new PhamePostQuery())
       ->setViewer($user)
       ->withIDs(array($this->id))
       ->requireCapabilities(
         array(
           PhabricatorPolicyCapability::CAN_EDIT,
         ))
       ->executeOne();
     if (!$post) {
       return new Aphront404Response();
     }
 
     if ($request->isFormPost()) {
       $post->delete();
       return id(new AphrontRedirectResponse())
         ->setURI('/phame/post/');
     }
 
     $cancel_uri = $this->getApplicationURI('/post/view/'.$post->getID().'/');
 
     $dialog = id(new AphrontDialogView())
       ->setUser($user)
       ->setTitle(pht('Delete Post?'))
-      ->setHeaderColor(PhabricatorActionHeaderView::HEADER_RED)
       ->appendChild(
         pht(
           'Really delete the post "%s"? It will be gone forever.',
           $post->getTitle()))
       ->addSubmitButton(pht('Delete'))
       ->addCancelButton($cancel_uri);
 
     return id(new AphrontDialogResponse())->setDialog($dialog);
   }
 }
diff --git a/src/applications/phame/controller/post/PhamePostEditController.php b/src/applications/phame/controller/post/PhamePostEditController.php
index 835b630ed..39cdc8e72 100644
--- a/src/applications/phame/controller/post/PhamePostEditController.php
+++ b/src/applications/phame/controller/post/PhamePostEditController.php
@@ -1,200 +1,203 @@
 <?php
 
 /**
  * @group phame
  */
 final class PhamePostEditController
   extends PhameController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
     $request       = $this->getRequest();
     $user          = $request->getUser();
 
     if ($this->id) {
       $post = id(new PhamePostQuery())
         ->setViewer($user)
         ->withIDs(array($this->id))
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_EDIT,
           ))
         ->executeOne();
       if (!$post) {
         return new Aphront404Response();
       }
 
       $cancel_uri = $this->getApplicationURI('/post/view/'.$this->id.'/');
       $submit_button = pht('Save Changes');
       $page_title = pht('Edit Post');
     } else {
       $blog = id(new PhameBlogQuery())
         ->setViewer($user)
         ->withIDs(array($request->getInt('blog')))
         ->executeOne();
       if (!$blog) {
         return new Aphront404Response();
       }
 
       $post = id(new PhamePost())
         ->setBloggerPHID($user->getPHID())
         ->setBlogPHID($blog->getPHID())
         ->setBlog($blog)
         ->setDatePublished(0)
         ->setVisibility(PhamePost::VISIBILITY_DRAFT);
       $cancel_uri = $this->getApplicationURI('/blog/view/'.$blog->getID().'/');
 
       $submit_button = pht('Save Draft');
       $page_title    = pht('Create Post');
     }
 
     $e_phame_title = null;
     $e_title       = true;
     $errors        = array();
 
     if ($request->isFormPost()) {
       $comments    = $request->getStr('comments_widget');
       $data        = array('comments_widget' => $comments);
       $phame_title = $request->getStr('phame_title');
       $phame_title = PhabricatorSlug::normalize($phame_title);
       $title       = $request->getStr('title');
       $post->setTitle($title);
       $post->setPhameTitle($phame_title);
       $post->setBody($request->getStr('body'));
       $post->setConfigData($data);
 
       if ($phame_title == '/') {
         $errors[]      = pht('Phame title must be nonempty.');
         $e_phame_title = pht('Required');
       }
 
       if (!strlen($title)) {
         $errors[] = pht('Title must be nonempty.');
         $e_title  = pht('Required');
       } else {
         $e_title = null;
       }
 
       if (!$errors) {
         try {
           $post->save();
 
           $uri = $this->getApplicationURI('/post/view/'.$post->getID().'/');
           return id(new AphrontRedirectResponse())->setURI($uri);
         } catch (AphrontQueryDuplicateKeyException $e) {
           $e_phame_title = pht('Not Unique');
           $errors[]      = pht('Another post already uses this slug. '.
                            'Each post must have a unique slug.');
         }
       }
     }
 
     $handle = PhabricatorObjectHandleData::loadOneHandle(
       $post->getBlogPHID(),
       $user);
 
     $form = id(new AphrontFormView())
       ->setUser($user)
-      ->setFlexible(true)
       ->addHiddenInput('blog', $request->getInt('blog'))
       ->appendChild(
         id(new AphrontFormMarkupControl())
           ->setLabel(pht('Blog'))
           ->setValue($handle->renderLink()))
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel(pht('Title'))
         ->setName('title')
         ->setValue($post->getTitle())
         ->setID('post-title')
         ->setError($e_title))
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel(pht('Phame Title'))
         ->setName('phame_title')
         ->setValue(rtrim($post->getPhameTitle(), '/'))
         ->setID('post-phame-title')
         ->setCaption(pht('Up to 64 alphanumeric characters '.
                      'with underscores for spaces. '.
                      'Formatting is enforced.'))
         ->setError($e_phame_title))
       ->appendChild(
         id(new PhabricatorRemarkupControl())
         ->setLabel(pht('Body'))
         ->setName('body')
         ->setValue($post->getBody())
         ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_TALL)
         ->setID('post-body')
         ->setUser($user)
         ->setDisableMacros(true))
       ->appendChild(
         id(new AphrontFormSelectControl())
         ->setLabel(pht('Comments Widget'))
         ->setName('comments_widget')
         ->setvalue($post->getCommentsWidget())
         ->setOptions($post->getCommentsWidgetOptionsForSelect()))
       ->appendChild(
         id(new AphrontFormSubmitControl())
         ->addCancelButton($cancel_uri)
         ->setValue($submit_button));
 
     $preview_panel = hsprintf(
       '<div class="aphront-panel-preview">
          <div class="phame-post-preview-header">
            Post Preview
          </div>
          <div id="post-preview">
            <div class="aphront-panel-preview-loading-text">
              Loading preview...
            </div>
          </div>
        </div>');
 
     require_celerity_resource('phame-css');
     Javelin::initBehavior(
       'phame-post-preview',
       array(
         'preview'     => 'post-preview',
         'body'        => 'post-body',
         'title'       => 'post-title',
         'phame_title' => 'post-phame-title',
         'uri'         => '/phame/post/preview/',
       ));
 
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Errors saving post.'))
         ->setErrors($errors);
     } else {
       $error_view = null;
     }
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($page_title)
+      ->setFormError($error_view)
+      ->setForm($form);
+
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($page_title)
         ->setHref($this->getApplicationURI('/post/view/'.$this->id.'/')));
 
     $nav = $this->renderSideNavFilterView(null);
     $nav->appendChild(
       array(
         $crumbs,
-        $error_view,
-        $form,
+        $form_box,
         $preview_panel,
       ));
 
     return $this->buildApplicationPage(
       $nav,
       array(
         'title' => $page_title,
         'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/phame/controller/post/PhamePostNewController.php b/src/applications/phame/controller/post/PhamePostNewController.php
index e335f3619..bfc69fbea 100644
--- a/src/applications/phame/controller/post/PhamePostNewController.php
+++ b/src/applications/phame/controller/post/PhamePostNewController.php
@@ -1,130 +1,134 @@
 <?php
 
 /**
  * @group phame
  */
 final class PhamePostNewController extends PhameController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $post = null;
     $view_uri = null;
     if ($this->id) {
       $post = id(new PhamePostQuery())
         ->setViewer($user)
         ->withIDs(array($this->id))
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_EDIT,
           ))
         ->executeOne();
       if (!$post) {
         return new Aphront404Response();
       }
 
       $view_uri = '/post/view/'.$post->getID().'/';
       $view_uri = $this->getApplicationURI($view_uri);
 
       if ($request->isFormPost()) {
         $blog = id(new PhameBlogQuery())
           ->setViewer($user)
           ->withIDs(array($request->getInt('blog')))
           ->requireCapabilities(
             array(
               PhabricatorPolicyCapability::CAN_JOIN,
             ))
           ->executeOne();
 
         if ($blog) {
           $post->setBlogPHID($blog->getPHID());
           $post->save();
 
           return id(new AphrontRedirectResponse())->setURI($view_uri);
         }
       }
 
       $title = pht('Move Post');
     } else {
       $title = pht('Create Post');
       $view_uri = $this->getApplicationURI('/post/new');
     }
 
     $blogs = id(new PhameBlogQuery())
       ->setViewer($user)
       ->requireCapabilities(
         array(
           PhabricatorPolicyCapability::CAN_JOIN,
         ))
       ->execute();
 
     $nav = $this->renderSideNavFilterView();
     $nav->selectFilter('post/new');
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($title)
         ->setHref($view_uri));
     $nav->appendChild($crumbs);
 
     if (!$blogs) {
       $notification = id(new AphrontErrorView())
         ->setSeverity(AphrontErrorView::SEVERITY_NODATA)
         ->appendChild(
           pht('You do not have permission to join any blogs. Create a blog '.
               'first, then you can post to it.'));
 
       $nav->appendChild($notification);
     } else {
       $options = mpull($blogs, 'getName', 'getID');
       asort($options);
 
       $selected_value = null;
       if ($post && $post->getBlog()) {
         $selected_value = $post->getBlog()->getID();
       }
 
       $form = id(new AphrontFormView())
         ->setUser($user)
-        ->setFlexible(true)
         ->appendChild(
           id(new AphrontFormSelectControl())
             ->setLabel(pht('Blog'))
             ->setName('blog')
             ->setOptions($options)
             ->setValue($selected_value));
 
       if ($post) {
         $form
           ->appendChild(
             id(new AphrontFormSubmitControl())
               ->setValue(pht('Move Post'))
               ->addCancelButton($view_uri));
       } else {
         $form
           ->setAction($this->getApplicationURI('post/edit/'))
           ->setMethod('GET')
           ->appendChild(
             id(new AphrontFormSubmitControl())
               ->setValue(pht('Continue')));
       }
 
-      $nav->appendChild($form);
+
+      $form_box = id(new PHUIFormBoxView())
+        ->setHeaderText($title)
+        ->setForm($form);
+
+      $nav->appendChild($form_box);
     }
 
     return $this->buildApplicationPage(
       $nav,
       array(
         'title'   => $title,
         'device'  => true,
       ));
   }
 }
diff --git a/src/applications/phame/controller/post/PhamePostPublishController.php b/src/applications/phame/controller/post/PhamePostPublishController.php
index dc657e3b7..7d24c845c 100644
--- a/src/applications/phame/controller/post/PhamePostPublishController.php
+++ b/src/applications/phame/controller/post/PhamePostPublishController.php
@@ -1,94 +1,93 @@
 <?php
 
 /**
  * @group phame
  */
 final class PhamePostPublishController extends PhameController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $post = id(new PhamePostQuery())
       ->setViewer($user)
       ->withIDs(array($this->id))
       ->requireCapabilities(
         array(
           PhabricatorPolicyCapability::CAN_EDIT,
         ))
       ->executeOne();
     if (!$post) {
       return new Aphront404Response();
     }
 
     $view_uri = $this->getApplicationURI('/post/view/'.$post->getID().'/');
 
     if ($request->isFormPost()) {
       $post->setVisibility(PhamePost::VISIBILITY_PUBLISHED);
       $post->setDatePublished(time());
       $post->save();
 
       return id(new AphrontRedirectResponse())->setURI($view_uri);
     }
 
     $header = id(new PhabricatorHeaderView())
       ->setHeader(pht('Preview Post'));
 
     $form = id(new AphrontFormView())
       ->setUser($user)
-      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Publish Post'))
           ->addCancelButton($view_uri));
 
     $frame = $this->renderPreviewFrame($post);
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName(pht('Preview'))
         ->setHref($view_uri));
 
     $nav = $this->renderSideNavFilterView(null);
     $nav->appendChild(
       array(
         $crumbs,
         $header,
         $form,
         $frame,
       ));
 
     return $this->buildApplicationPage(
       $nav,
       array(
         'title'   => pht('Preview Post'),
         'device'  => true,
       ));
   }
 
   private function renderPreviewFrame(PhamePost $post) {
 
     // TODO: Clean up this CSS.
 
     return phutil_tag(
       'div',
       array(
         'style' => 'text-align: center; padding: 1em;',
       ),
       phutil_tag(
         'iframe',
         array(
           'style' => 'width: 100%; height: 600px; '.
                      'border: 1px solid #303030;',
           'src' => $this->getApplicationURI('/post/framed/'.$post->getID().'/'),
         ),
         ''));
   }
 }
diff --git a/src/applications/phlux/controller/PhluxEditController.php b/src/applications/phlux/controller/PhluxEditController.php
index 38ab9da6f..4c57f52ae 100644
--- a/src/applications/phlux/controller/PhluxEditController.php
+++ b/src/applications/phlux/controller/PhluxEditController.php
@@ -1,195 +1,195 @@
 <?php
 
 final class PhluxEditController extends PhluxController {
 
   private $key;
 
   public function willProcessRequest(array $data) {
     $this->key = idx($data, 'key');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $is_new = ($this->key === null);
     if ($is_new) {
       $var = new PhluxVariable();
       $var->setViewPolicy(PhabricatorPolicies::POLICY_USER);
       $var->setEditPolicy(PhabricatorPolicies::POLICY_USER);
     } else {
       $var = id(new PhluxVariableQuery())
         ->setViewer($user)
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_VIEW,
             PhabricatorPolicyCapability::CAN_EDIT,
           ))
         ->withKeys(array($this->key))
         ->executeOne();
       if (!$var) {
         return new Aphront404Response();
       }
       $view_uri = $this->getApplicationURI('/view/'.$this->key.'/');
     }
 
     $e_key = ($is_new ? true : null);
     $e_value = true;
     $errors = array();
 
     $key = $var->getVariableKey();
 
     $display_value = null;
     $value = $var->getVariableValue();
 
     if ($request->isFormPost()) {
       if ($is_new) {
         $key = $request->getStr('key');
         if (!strlen($key)) {
           $errors[] = pht('Variable key is required.');
           $e_key = pht('Required');
         } else if (!preg_match('/^[a-z0-9.-]+$/', $key)) {
           $errors[] = pht(
             'Variable key "%s" must contain only lowercase letters, digits, '.
             'period, and hyphen.',
             $key);
           $e_key = pht('Invalid');
         }
       }
 
       $raw_value = $request->getStr('value');
       $value = json_decode($raw_value, true);
       if ($value === null && strtolower($raw_value) !== 'null') {
         $e_value = pht('Invalid');
         $errors[] = pht('Variable value must be valid JSON.');
         $display_value = $raw_value;
       }
 
       if (!$errors) {
         $editor = id(new PhluxVariableEditor())
           ->setActor($user)
           ->setContinueOnNoEffect(true)
           ->setContentSourceFromRequest($request);
 
         $xactions = array();
         $xactions[] = id(new PhluxTransaction())
           ->setTransactionType(PhluxTransaction::TYPE_EDIT_KEY)
           ->setNewValue($key);
 
         $xactions[] = id(new PhluxTransaction())
           ->setTransactionType(PhluxTransaction::TYPE_EDIT_VALUE)
           ->setNewValue($value);
 
         $xactions[] = id(new PhluxTransaction())
           ->setTransactionType(PhabricatorTransactions::TYPE_VIEW_POLICY)
           ->setNewValue($request->getStr('viewPolicy'));
 
         $xactions[] = id(new PhluxTransaction())
           ->setTransactionType(PhabricatorTransactions::TYPE_EDIT_POLICY)
           ->setNewValue($request->getStr('editPolicy'));
 
         try {
           $editor->applyTransactions($var, $xactions);
           $view_uri = $this->getApplicationURI('/view/'.$key.'/');
           return id(new AphrontRedirectResponse())->setURI($view_uri);
         } catch (AphrontQueryDuplicateKeyException $ex) {
           $e_key = pht('Not Unique');
           $errors[] = pht('Variable key must be unique.');
         }
       }
     }
 
     if ($display_value === null) {
       if (is_array($value) &&
           (array_keys($value) !== array_keys(array_values($value)))) {
         $json = new PhutilJSON();
         $display_value = $json->encodeFormatted($value);
       } else {
         $display_value = json_encode($value);
       }
     }
 
     if ($errors) {
       $errors = id(new AphrontErrorView())
         ->setErrors($errors);
     }
 
     $policies = id(new PhabricatorPolicyQuery())
       ->setViewer($user)
       ->setObject($var)
       ->execute();
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setValue($var->getVariableKey())
           ->setLabel(pht('Key'))
           ->setName('key')
           ->setError($e_key)
           ->setCaption(pht('Lowercase letters, digits, dot and hyphen only.'))
           ->setDisabled(!$is_new))
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setValue($display_value)
           ->setLabel(pht('Value'))
           ->setName('value')
           ->setCaption(pht('Enter value as JSON.'))
           ->setError($e_value))
       ->appendChild(
         id(new AphrontFormPolicyControl())
           ->setName('viewPolicy')
           ->setPolicyObject($var)
           ->setCapability(PhabricatorPolicyCapability::CAN_VIEW)
           ->setPolicies($policies))
       ->appendChild(
         id(new AphrontFormPolicyControl())
           ->setName('editPolicy')
           ->setPolicyObject($var)
           ->setCapability(PhabricatorPolicyCapability::CAN_EDIT)
           ->setPolicies($policies));
 
     if ($is_new) {
       $form->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Create Variable')));
     } else {
       $form->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Update Variable'))
           ->addCancelButton($view_uri));
     }
 
     $crumbs = $this->buildApplicationCrumbs();
 
     if ($is_new) {
       $title = pht('Create Variable');
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName($title)
           ->setHref($request->getRequestURI()));
     } else {
       $title = pht('Edit %s', $this->key);
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName($title)
           ->setHref($request->getRequestURI()));
     }
 
-    $header = id(new PhabricatorHeaderView())
-      ->setHeader($title);
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($title)
+      ->setFormError($errors)
+      ->setForm($form);
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $header,
-        $errors,
-        $form,
+        $form_box,
       ),
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/pholio/controller/PholioMockEditController.php b/src/applications/pholio/controller/PholioMockEditController.php
index e5b6ce464..ad924c269 100644
--- a/src/applications/pholio/controller/PholioMockEditController.php
+++ b/src/applications/pholio/controller/PholioMockEditController.php
@@ -1,345 +1,348 @@
 <?php
 
 /**
  * @group pholio
  */
 final class PholioMockEditController extends PholioController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     if ($this->id) {
       $mock = id(new PholioMockQuery())
         ->setViewer($user)
         ->needImages(true)
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_VIEW,
             PhabricatorPolicyCapability::CAN_EDIT,
           ))
         ->withIDs(array($this->id))
         ->executeOne();
 
       if (!$mock) {
         return new Aphront404Response();
       }
 
       $title = pht('Edit Mock');
 
       $is_new = false;
       $mock_images = $mock->getImages();
       $files = mpull($mock_images, 'getFile');
       $mock_images = mpull($mock_images, null, 'getFilePHID');
     } else {
       $mock = id(new PholioMock())
         ->setAuthorPHID($user->getPHID())
         ->attachImages(array())
         ->setViewPolicy(PhabricatorPolicies::POLICY_USER);
 
       $title = pht('Create Mock');
 
       $is_new = true;
       $files = array();
       $mock_images = array();
     }
 
     $e_name = true;
     $e_images = true;
     $errors = array();
 
     $v_name = $mock->getName();
     $v_desc = $mock->getDescription();
     $v_view = $mock->getViewPolicy();
     $v_cc = PhabricatorSubscribersQuery::loadSubscribersForPHID(
       $mock->getPHID());
 
     if ($request->isFormPost()) {
       $xactions = array();
 
       $type_name = PholioTransactionType::TYPE_NAME;
       $type_desc = PholioTransactionType::TYPE_DESCRIPTION;
       $type_view = PhabricatorTransactions::TYPE_VIEW_POLICY;
       $type_cc   = PhabricatorTransactions::TYPE_SUBSCRIBERS;
 
       $v_name = $request->getStr('name');
       $v_desc = $request->getStr('description');
       $v_view = $request->getStr('can_view');
       $v_cc   = $request->getArr('cc');
 
       $mock_xactions = array();
       $mock_xactions[$type_name] = $v_name;
       $mock_xactions[$type_desc] = $v_desc;
       $mock_xactions[$type_view] = $v_view;
       $mock_xactions[$type_cc]   = array('=' => $v_cc);
 
       if (!strlen($request->getStr('name'))) {
         $e_name = 'Required';
         $errors[] = pht('You must give the mock a name.');
       }
 
       $file_phids = $request->getArr('file_phids');
       if ($file_phids) {
         $files = id(new PhabricatorFileQuery())
           ->setViewer($user)
           ->withPHIDs($file_phids)
           ->execute();
         $files = mpull($files, null, 'getPHID');
         $files = array_select_keys($files, $file_phids);
       } else {
         $files = array();
       }
 
       if (!$files) {
         $e_images = pht('Required');
         $errors[] = pht('You must add at least one image to the mock.');
       } else {
         $mock->setCoverPHID(head($files)->getPHID());
       }
 
       if (!$errors) {
         foreach ($mock_xactions as $type => $value) {
           $xactions[$type] = id(new PholioTransaction())
             ->setTransactionType($type)
             ->setNewValue($value);
         }
 
         $order = $request->getStrList('imageOrder');
         $sequence_map = array_flip($order);
         $replaces = $request->getArr('replaces');
         $replaces_map = array_flip($replaces);
 
         /**
          * Foreach file posted, check to see whether we are replacing an image,
          * adding an image, or simply updating image metadata. Create
          * transactions for these cases as appropos.
          */
         foreach ($files as $file_phid => $file) {
           $replaces_image_phid = null;
           if (isset($replaces_map[$file_phid])) {
             $old_file_phid = $replaces_map[$file_phid];
             $old_image = idx($mock_images, $old_file_phid);
             if ($old_image) {
               $replaces_image_phid = $old_image->getPHID();
             }
           }
 
           $existing_image = idx($mock_images, $file_phid);
 
           $title = (string)$request->getStr('title_'.$file_phid);
           $description = (string)$request->getStr('description_'.$file_phid);
           $sequence = $sequence_map[$file_phid];
 
           if ($replaces_image_phid) {
             $replace_image = id(new PholioImage())
               ->setReplacesImagePHID($replaces_image_phid)
               ->setFilePhid($file_phid)
               ->setName(strlen($title) ? $title : $file->getName())
               ->setDescription($description)
               ->setSequence($sequence);
             $xactions[] = id(new PholioTransaction())
               ->setTransactionType(
                 PholioTransactionType::TYPE_IMAGE_REPLACE)
               ->setNewValue($replace_image);
          } else if (!$existing_image) { // this is an add
             $add_image = id(new PholioImage())
               ->setFilePhid($file_phid)
               ->setName(strlen($title) ? $title : $file->getName())
               ->setDescription($description)
               ->setSequence($sequence);
             $xactions[] = id(new PholioTransaction())
               ->setTransactionType(PholioTransactionType::TYPE_IMAGE_FILE)
               ->setNewValue(
                 array('+' => array($add_image)));
           } else {
             $xactions[] = id(new PholioTransaction())
               ->setTransactionType(PholioTransactionType::TYPE_IMAGE_NAME)
               ->setNewValue(
                 array($existing_image->getPHID() => $title));
             $xactions[] = id(new PholioTransaction())
               ->setTransactionType(
                 PholioTransactionType::TYPE_IMAGE_DESCRIPTION)
                 ->setNewValue(
                   array($existing_image->getPHID() => $description));
             $xactions[] = id(new PholioTransaction())
               ->setTransactionType(
                 PholioTransactionType::TYPE_IMAGE_SEQUENCE)
                 ->setNewValue(
                   array($existing_image->getPHID() => $sequence));
           }
         }
         foreach ($mock_images as $file_phid => $mock_image) {
           if (!isset($files[$file_phid]) && !isset($replaces[$file_phid])) {
             // this is an outright delete
             $xactions[] = id(new PholioTransaction())
               ->setTransactionType(PholioTransactionType::TYPE_IMAGE_FILE)
               ->setNewValue(
                 array('-' => array($mock_image)));
           }
         }
 
         $mock->openTransaction();
           $editor = id(new PholioMockEditor())
             ->setContentSourceFromRequest($request)
             ->setContinueOnNoEffect(true)
             ->setActor($user);
 
           $xactions = $editor->applyTransactions($mock, $xactions);
 
         $mock->saveTransaction();
 
         return id(new AphrontRedirectResponse())
           ->setURI('/M'.$mock->getID());
       }
     }
 
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Form Errors'))
         ->setErrors($errors);
     } else {
       $error_view = null;
     }
 
     if ($this->id) {
       $submit = id(new AphrontFormSubmitControl())
         ->addCancelButton('/M'.$this->id)
         ->setValue(pht('Save'));
     } else {
       $submit = id(new AphrontFormSubmitControl())
         ->addCancelButton($this->getApplicationURI())
         ->setValue(pht('Create'));
     }
 
     $policies = id(new PhabricatorPolicyQuery())
       ->setViewer($user)
       ->setObject($mock)
       ->execute();
 
     // NOTE: Make this show up correctly on the rendered form.
     $mock->setViewPolicy($v_view);
 
     $handles = id(new PhabricatorObjectHandleData($v_cc))
       ->setViewer($user)
       ->loadHandles();
 
     $cc_tokens = mpull($handles, 'getFullName', 'getPHID');
 
     $image_elements = array();
     foreach ($mock_images as $mock_image) {
       $image_elements[] = id(new PholioUploadedImageView())
         ->setUser($user)
         ->setImage($mock_image);
     }
 
     $list_id = celerity_generate_unique_node_id();
     $drop_id = celerity_generate_unique_node_id();
     $order_id = celerity_generate_unique_node_id();
 
     $list_control = phutil_tag(
       'div',
       array(
         'id' => $list_id,
         'class' => 'pholio-edit-list',
       ),
       $image_elements);
 
     $drop_control = phutil_tag(
       'div',
       array(
         'id' => $drop_id,
         'class' => 'pholio-edit-drop',
       ),
       'Drag and drop images here to add them to the mock.');
 
     $order_control = phutil_tag(
       'input',
       array(
         'type' => 'hidden',
         'name' => 'imageOrder',
         'id' => $order_id,
       ));
 
     Javelin::initBehavior(
       'pholio-mock-edit',
       array(
         'listID' => $list_id,
         'dropID' => $drop_id,
         'orderID' => $order_id,
         'uploadURI' => '/file/dropupload/',
         'renderURI' => $this->getApplicationURI('image/upload/'),
         'pht' => array(
           'uploading' => pht('Uploading Image...'),
           'uploaded' => pht('Upload Complete...'),
           'undo' => pht('Undo'),
           'removed' => pht('This image will be removed from the mock.'),
         ),
       ));
 
     require_celerity_resource('pholio-edit-css');
     $form = id(new AphrontFormView())
       ->setUser($user)
-      ->setFlexible(true)
       ->appendChild($order_control)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setName('name')
           ->setValue($v_name)
           ->setLabel(pht('Name'))
           ->setError($e_name))
       ->appendChild(
         id(new PhabricatorRemarkupControl())
           ->setName('description')
           ->setValue($v_desc)
           ->setLabel(pht('Description'))
           ->setUser($user))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setLabel(pht('CC'))
           ->setName('cc')
           ->setValue($cc_tokens)
           ->setUser($user)
           ->setDatasource('/typeahead/common/mailable/'))
       ->appendChild(
         id(new AphrontFormPolicyControl())
           ->setUser($user)
           ->setCapability(PhabricatorPolicyCapability::CAN_VIEW)
           ->setPolicyObject($mock)
           ->setPolicies($policies)
           ->setName('can_view'))
       ->appendChild(
         id(new AphrontFormMarkupControl())
           ->setValue($list_control))
       ->appendChild(
         id(new AphrontFormMarkupControl())
           ->setValue($drop_control)
           ->setError($e_images))
       ->appendChild($submit);
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($title)
+      ->setFormError($error_view)
+      ->setForm($form);
+
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($title)
         ->setHref($this->getApplicationURI()));
 
     $content = array(
       $crumbs,
-      $error_view,
-      $form,
+      $form_box,
     );
 
     return $this->buildApplicationPage(
       $content,
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/phortune/controller/PhortuneAccountBuyController.php b/src/applications/phortune/controller/PhortuneAccountBuyController.php
index 3937edbb0..de0c6ae85 100644
--- a/src/applications/phortune/controller/PhortuneAccountBuyController.php
+++ b/src/applications/phortune/controller/PhortuneAccountBuyController.php
@@ -1,185 +1,183 @@
 <?php
 
 final class PhortuneAccountBuyController
   extends PhortuneController {
 
   private $accountID;
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->accountID = $data['accountID'];
     $this->id = $data['id'];
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $account = id(new PhortuneAccountQuery())
       ->setViewer($user)
       ->withIDs(array($this->accountID))
       ->executeOne();
     if (!$account) {
       return new Aphront404Response();
     }
 
     $account_uri = $this->getApplicationURI($account->getID().'/');
 
     $product = id(new PhortuneProductQuery())
       ->setViewer($user)
       ->withIDs(array($this->id))
       ->executeOne();
     if (!$product) {
       return new Aphront404Response();
     }
 
     $purchase = new PhortunePurchase();
     $purchase->setProductPHID($product->getPHID());
     $purchase->setAccountPHID($account->getPHID());
     $purchase->setPurchaseName($product->getProductName());
     $purchase->setBasePriceInCents($product->getPriceInCents());
     $purchase->setQuantity(1);
     $purchase->setTotalPriceInCents(
       $purchase->getBasePriceInCents() * $purchase->getQuantity());
     $purchase->setStatus(PhortunePurchase::STATUS_PENDING);
 
     $cart = new PhortuneCart();
     $cart->setAccountPHID($account->getPHID());
     $cart->setOwnerPHID($user->getPHID());
     $cart->attachPurchases(
       array(
         $purchase,
       ));
 
     $rows = array();
     $total = 0;
     foreach ($cart->getPurchases() as $purchase) {
       $rows[] = array(
         $purchase->getPurchaseName(),
         PhortuneCurrency::newFromUSDCents($purchase->getBasePriceInCents())
           ->formatForDisplay(),
         $purchase->getQuantity(),
         PhortuneCurrency::newFromUSDCents($purchase->getTotalPriceInCents())
           ->formatForDisplay(),
       );
 
       $total += $purchase->getTotalPriceInCents();
     }
 
     $rows[] = array(
       phutil_tag('strong', array(), pht('Total')),
       '',
       '',
       phutil_tag('strong', array(),
         PhortuneCurrency::newFromUSDCents($total)->formatForDisplay()),
     );
 
     $table = new AphrontTableView($rows);
     $table->setHeaders(
       array(
         pht('Item'),
         pht('Price'),
         pht('Qty.'),
         pht('Total'),
       ));
 
     $panel = new AphrontPanelView();
     $panel->setNoBackground(true);
     $panel->appendChild($table);
 
 
     $title = pht('Buy Stuff');
 
 
     $methods = id(new PhortunePaymentMethodQuery())
       ->setViewer($user)
       ->withAccountPHIDs(array($account->getPHID()))
       ->withStatus(PhortunePaymentMethodQuery::STATUS_OPEN)
       ->execute();
 
     $method_control = id(new AphrontFormRadioButtonControl())
       ->setLabel(pht('Payment Method'));
 
     if (!$methods) {
       $method_control = id(new AphrontFormStaticControl())
         ->setLabel(pht('Payment Method'))
         ->setValue(
           phutil_tag('em', array(), pht('No payment methods configured.')));
     } else {
       $method_control = id(new AphrontFormRadioButtonControl())
         ->setLabel(pht('Payment Method'))
         ->setName('paymentMethodID')
         ->setValue($request->getInt('paymentMethodID'));
       foreach ($methods as $method) {
         $method_control->addButton(
           $method->getID(),
           $method->getBrand().' / '.$method->getLastFourDigits(),
           $method->getDescription());
       }
     }
 
     $payment_method_uri = $this->getApplicationURI(
       $account->getID().'/paymentmethod/edit/');
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->appendChild($method_control);
 
     $add_providers = PhortunePaymentProvider::getProvidersForAddPaymentMethod();
     if ($add_providers) {
       $new_method = phutil_tag(
         'a',
         array(
           'class' => 'button grey',
           'href'  => $payment_method_uri,
           'sigil' => 'workflow',
         ),
         pht('Add New Payment Method'));
       $form->appendChild(
         id(new AphrontFormMarkupControl())
           ->setValue($new_method));
     }
 
     if ($methods || $add_providers) {
       $form
         ->appendChild(
           id(new AphrontFormSubmitControl())
             ->setValue(pht("Submit Payment"))
             ->setDisabled(!$methods));
     }
 
     $provider_form = null;
 
     $pay_providers = PhortunePaymentProvider::getProvidersForOneTimePayment();
     if ($pay_providers) {
       $one_time_options = array();
       foreach ($pay_providers as $provider) {
         $one_time_options[] = $provider->renderOneTimePaymentButton(
           $account,
           $cart,
           $user);
       }
 
-      $provider_form = id(new AphrontFormLayoutView())
-        ->setPadded(true)
-        ->setBackgroundShading(true);
+      $provider_form = new PHUIFormLayoutView();
       $provider_form->appendChild(
         id(new AphrontFormMarkupControl())
           ->setLabel('Pay With')
           ->setValue($one_time_options));
     }
 
     return $this->buildApplicationPage(
       array(
         $panel,
         $form,
         phutil_tag('br', array()),
         $provider_form,
       ),
       array(
         'title'   => $title,
         'device'  => true,
       ));
 
   }
 }
diff --git a/src/applications/phrequent/controller/PhrequentListController.php b/src/applications/phrequent/controller/PhrequentListController.php
index cdce5310e..3c9724c1c 100644
--- a/src/applications/phrequent/controller/PhrequentListController.php
+++ b/src/applications/phrequent/controller/PhrequentListController.php
@@ -1,290 +1,289 @@
 <?php
 
 final class PhrequentListController extends PhrequentController {
 
   private $view;
 
   public function willProcessRequest(array $data) {
     $this->view = idx($data, 'view', "current");
   }
 
   private function getArrToStrList($key) {
     $arr = $this->getRequest()->getArr($key);
     $arr = implode(',', $arr);
     return nonempty($arr, null);
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     if ($request->isFormPost()) {
       // Redirect to GET so URIs can be copy/pasted.
 
       $order = $request->getStr('o');
       $order = nonempty($order, null);
 
       $ended = $request->getStr('e');
       $ended = nonempty($ended, null);
 
       $uri = $request->getRequestURI()
         ->alter('users', $this->getArrToStrList('set_users'))
         ->alter('o',     $order)
         ->alter('e',     $ended);
 
       return id(new AphrontRedirectResponse())->setURI($uri);
     }
 
     $nav = $this->buildNav($this->view);
 
     $has_user_filter = array(
       "current" => true,
       "recent" => true,
     );
 
     $user_phids = $request->getStrList('users', array());
     if (isset($has_user_filter[$this->view])) {
       $user_phids = array($user->getPHID());
     }
 
     switch ($this->view) {
       case "current":
       case "allcurrent":
         $order_key_default = "s";
         $ended_key_default = "n";
         break;
       case "recent":
       case "allrecent":
         $order_key_default = "s";
         $ended_key_default = "y";
         break;
       default:
         $order_key_default = "s";
         $ended_key_default = "a";
         break;
     }
 
     switch ($request->getStr('o', $order_key_default)) {
       case 's':
         $order = PhrequentUserTimeQuery::ORDER_STARTED;
         break;
       case 'e':
         $order = PhrequentUserTimeQuery::ORDER_ENDED;
         break;
       case 'd':
         $order = PhrequentUserTimeQuery::ORDER_DURATION;
         break;
       default:
         throw new Exception("Unknown order!");
     }
 
     switch ($request->getStr('e', $ended_key_default)) {
       case 'a':
         $ended = PhrequentUserTimeQuery::ENDED_ALL;
         break;
       case 'y':
         $ended = PhrequentUserTimeQuery::ENDED_YES;
         break;
       case 'n':
         $ended = PhrequentUserTimeQuery::ENDED_NO;
         break;
       default:
         throw new Exception("Unknown ended!");
     }
 
     $filter = new AphrontListFilterView();
     $filter->appendChild(
       $this->buildForm($user_phids, $order_key_default, $ended_key_default));
 
     $query = new PhrequentUserTimeQuery();
     $query->setOrder($order);
     $query->setEnded($ended);
     $query->setUsers($user_phids);
 
     $pager = new AphrontPagerView();
     $pager->setPageSize(500);
     $pager->setOffset($request->getInt('offset'));
     $pager->setURI($request->getRequestURI(), 'offset');
 
     $logs = $query->executeWithOffsetPager($pager);
 
     $title = pht('Time Tracked');
 
     $table = $this->buildTableView($logs);
     $table->appendChild($pager);
 
     $nav->appendChild(
       array(
         $filter,
         $table,
         $pager,
       ));
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($title)
         ->setHref($this->getApplicationURI('/')));
 
     $nav->setCrumbs($crumbs);
 
     return $this->buildApplicationPage(
       $nav,
       array(
         'title' => $title,
         'device' => true,
       ));
 
   }
 
   protected function buildForm(array $user_phids, $order_key_default,
                                $ended_key_default) {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $form = id(new AphrontFormView())
       ->setUser($user)
-      ->setNoShading(true)
       ->setAction($this->getApplicationURI("/view/custom/"));
 
     $user_handles = id(new PhabricatorObjectHandleData($user_phids))
       ->setViewer($user)
       ->loadHandles();
     $tokens = array();
     foreach ($user_phids as $phid) {
       $tokens[$phid] = $user_handles[$phid]->getFullName();
     }
     $form->appendChild(
       id(new AphrontFormTokenizerControl())
         ->setDatasource('/typeahead/common/searchowner/')
         ->setName('set_users')
         ->setLabel(pht('Users'))
         ->setValue($tokens));
 
     $form->appendChild(
       id(new AphrontFormToggleButtonsControl())
         ->setName('o')
         ->setLabel(pht('Sort Order'))
         ->setBaseURI($request->getRequestURI(), 'o')
         ->setValue($request->getStr('o', $order_key_default))
         ->setButtons(
           array(
             's'   => pht('Started'),
             'e'   => pht('Ended'),
             'd'   => pht('Duration'),
           )));
 
     $form->appendChild(
       id(new AphrontFormToggleButtonsControl())
         ->setName('e')
         ->setLabel(pht('Ended'))
         ->setBaseURI($request->getRequestURI(), 'e')
         ->setValue($request->getStr('e', $ended_key_default))
         ->setButtons(
           array(
             'y'   => pht('Yes'),
             'n'   => pht('No'),
             'a'   => pht('All'),
           )));
 
     $form->appendChild(
       id(new AphrontFormSubmitControl())->setValue(pht('Filter Objects')));
 
     return $form;
   }
 
   protected function buildTableView(array $usertimes) {
     assert_instances_of($usertimes, 'PhrequentUserTime');
 
     $user = $this->getRequest()->getUser();
 
     $phids = array();
     foreach ($usertimes as $usertime) {
       $phids[] = $usertime->getUserPHID();
       $phids[] = $usertime->getObjectPHID();
     }
     $handles = $this->loadViewerHandles($phids);
 
     $rows = array();
     foreach ($usertimes as $usertime) {
 
       if ($usertime->getDateEnded() !== null) {
         $time_spent = $usertime->getDateEnded() - $usertime->getDateStarted();
         $time_ended = phabricator_datetime($usertime->getDateEnded(), $user);
       } else {
         $time_spent = time() - $usertime->getDateStarted();
         $time_ended = phutil_tag(
           'em',
           array(),
           pht('Ongoing'));
       }
 
       $usertime_user = $handles[$usertime->getUserPHID()];
       $usertime_object = null;
       $object = null;
       if ($usertime->getObjectPHID() !== null) {
         $usertime_object = $handles[$usertime->getObjectPHID()];
         $object = phutil_tag(
           'a',
           array(
             'href' => $usertime_object->getURI()
           ),
           $usertime_object->getFullName());
       } else {
         $object = phutil_tag(
           'em',
           array(),
           pht('None'));
       }
 
       $rows[] = array(
         $object,
         phutil_tag(
           'a',
           array(
             'href' => $usertime_user->getURI()
           ),
           $usertime_user->getFullName()),
         phabricator_datetime($usertime->getDateStarted(), $user),
         $time_ended,
         $time_spent == 0 ? 'none' :
           phabricator_format_relative_time_detailed($time_spent),
         $usertime->getNote()
       );
     }
 
     $table = new AphrontTableView($rows);
     $table->setDeviceReadyTable(true);
     $table->setHeaders(
       array(
         'Object',
         'User',
         'Started',
         'Ended',
         'Duration',
         'Note'
       ));
     $table->setShortHeaders(
       array(
         'O',
         'U',
         'S',
         'E',
         'D',
         'Note',
         '',
       ));
     $table->setColumnClasses(
       array(
         '',
         '',
         '',
         '',
         '',
         'wide'
       ));
 
     return $table;
   }
 
 }
diff --git a/src/applications/phriction/controller/PhrictionDeleteController.php b/src/applications/phriction/controller/PhrictionDeleteController.php
index 6df2dab66..9988470f1 100644
--- a/src/applications/phriction/controller/PhrictionDeleteController.php
+++ b/src/applications/phriction/controller/PhrictionDeleteController.php
@@ -1,64 +1,63 @@
 <?php
 
 /**
  * @group phriction
  */
 final class PhrictionDeleteController extends PhrictionController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $document = id(new PhrictionDocument())->load($this->id);
     if (!$document) {
       return new Aphront404Response();
     }
 
     $e_text = null;
     $disallowed_states = array(
       PhrictionDocumentStatus::STATUS_DELETED => true, // Silly
       PhrictionDocumentStatus::STATUS_MOVED => true, // Makes no sense
       PhrictionDocumentStatus::STATUS_STUB => true, // How could they?
     );
     if (isset($disallowed_states[$document->getStatus()])) {
       $e_text = pht('An already moved or deleted document can not be deleted');
     }
 
     $document_uri = PhrictionDocument::getSlugURI($document->getSlug());
 
     if (!$e_text && $request->isFormPost()) {
         $editor = id(PhrictionDocumentEditor::newForSlug($document->getSlug()))
           ->setActor($user)
           ->delete();
         return id(new AphrontRedirectResponse())->setURI($document_uri);
     }
 
     if ($e_text) {
       $dialog = id(new AphrontDialogView())
         ->setUser($user)
         ->setTitle(pht('Can not delete document!'))
         ->appendChild($e_text)
         ->addCancelButton($document_uri);
     } else {
       $dialog = id(new AphrontDialogView())
         ->setUser($user)
         ->setTitle(pht('Delete Document?'))
-        ->setHeaderColor(PhabricatorActionHeaderView::HEADER_RED)
         ->appendChild(
           pht('Really delete this document? You can recover it later by '.
           'reverting to a previous version.'))
         ->addSubmitButton(pht('Delete'))
         ->addCancelButton($document_uri);
     }
 
     return id(new AphrontDialogResponse())->setDialog($dialog);
   }
 
 }
diff --git a/src/applications/phriction/controller/PhrictionEditController.php b/src/applications/phriction/controller/PhrictionEditController.php
index 7ff2bd391..77daf426c 100644
--- a/src/applications/phriction/controller/PhrictionEditController.php
+++ b/src/applications/phriction/controller/PhrictionEditController.php
@@ -1,267 +1,268 @@
 <?php
 
 /**
  * @group phriction
  */
 final class PhrictionEditController
   extends PhrictionController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     if ($this->id) {
       $document = id(new PhrictionDocument())->load($this->id);
       if (!$document) {
         return new Aphront404Response();
       }
 
       $revert = $request->getInt('revert');
       if ($revert) {
         $content = id(new PhrictionContent())->loadOneWhere(
           'documentID = %d AND version = %d',
           $document->getID(),
           $revert);
         if (!$content) {
           return new Aphront404Response();
         }
       } else {
         $content = id(new PhrictionContent())->load($document->getContentID());
       }
 
     } else {
       $slug = $request->getStr('slug');
       $slug = PhabricatorSlug::normalize($slug);
       if (!$slug) {
         return new Aphront404Response();
       }
 
       $document = id(new PhrictionDocument())->loadOneWhere(
         'slug = %s',
         $slug);
 
       if ($document) {
         $content = id(new PhrictionContent())->load($document->getContentID());
       } else {
         if (PhrictionDocument::isProjectSlug($slug)) {
           $project = id(new PhabricatorProject())->loadOneWhere(
             'phrictionSlug = %s',
             PhrictionDocument::getProjectSlugIdentifier($slug));
           if (!$project) {
             return new Aphront404Response();
           }
         }
         $document = new PhrictionDocument();
         $document->setSlug($slug);
 
         $content  = new PhrictionContent();
         $content->setSlug($slug);
 
         $default_title = PhabricatorSlug::getDefaultTitle($slug);
         $content->setTitle($default_title);
       }
     }
 
     if ($request->getBool('nodraft')) {
       $draft = null;
       $draft_key = null;
     } else {
       if ($document->getPHID()) {
         $draft_key = $document->getPHID().':'.$content->getVersion();
       } else {
         $draft_key = 'phriction:'.$content->getSlug();
       }
       $draft = id(new PhabricatorDraft())->loadOneWhere(
         'authorPHID = %s AND draftKey = %s',
         $user->getPHID(),
         $draft_key);
     }
 
     require_celerity_resource('phriction-document-css');
 
     $e_title = true;
     $notes = null;
     $errors = array();
 
     if ($request->isFormPost()) {
       $title = $request->getStr('title');
       $notes = $request->getStr('description');
 
       if (!strlen($title)) {
         $e_title = pht('Required');
         $errors[] = pht('Document title is required.');
       } else {
         $e_title = null;
       }
 
       if ($document->getID()) {
         if ($content->getTitle() == $title &&
             $content->getContent() == $request->getStr('content')) {
 
           $dialog = new AphrontDialogView();
           $dialog->setUser($user);
           $dialog->setTitle(pht('No Edits'));
           $dialog->appendChild(phutil_tag('p', array(), pht(
             'You did not make any changes to the document.')));
           $dialog->addCancelButton($request->getRequestURI());
 
           return id(new AphrontDialogResponse())->setDialog($dialog);
         }
       } else if (!strlen($request->getStr('content'))) {
 
         // We trigger this only for new pages. For existing pages, deleting
         // all the content counts as deleting the page.
 
         $dialog = new AphrontDialogView();
         $dialog->setUser($user);
         $dialog->setTitle(pht('Empty Page'));
         $dialog->appendChild(phutil_tag('p', array(), pht(
           'You can not create an empty document.')));
         $dialog->addCancelButton($request->getRequestURI());
 
         return id(new AphrontDialogResponse())->setDialog($dialog);
       }
 
       if (!count($errors)) {
         $editor = id(PhrictionDocumentEditor::newForSlug($document->getSlug()))
           ->setActor($user)
           ->setTitle($title)
           ->setContent($request->getStr('content'))
           ->setDescription($notes);
 
         $editor->save();
 
         if ($draft) {
           $draft->delete();
         }
 
         $uri = PhrictionDocument::getSlugURI($document->getSlug());
         return id(new AphrontRedirectResponse())->setURI($uri);
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Form Errors'))
         ->setErrors($errors);
     }
 
     if ($document->getID()) {
       $panel_header = pht('Edit Phriction Document');
       $submit_button = pht('Save Changes');
     } else {
       $panel_header = pht('Create New Phriction Document');
       $submit_button = pht('Create Document');
     }
 
     $uri = $document->getSlug();
     $uri = PhrictionDocument::getSlugURI($uri);
     $uri = PhabricatorEnv::getProductionURI($uri);
 
     $cancel_uri = PhrictionDocument::getSlugURI($document->getSlug());
 
     if ($draft &&
         strlen($draft->getDraft()) &&
         ($draft->getDraft() != $content->getContent())) {
       $content_text = $draft->getDraft();
 
       $discard = phutil_tag(
         'a',
         array(
           'href' => $request->getRequestURI()->alter('nodraft', true),
         ),
         pht('discard this draft'));
 
       $draft_note = new AphrontErrorView();
       $draft_note->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
       $draft_note->setTitle('Recovered Draft');
       $draft_note->appendChild(hsprintf(
         '<p>Showing a saved draft of your edits, you can %s.</p>',
         $discard));
     } else {
       $content_text = $content->getContent();
       $draft_note = null;
     }
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->setWorkflow(true)
       ->setAction($request->getRequestURI()->getPath())
       ->addHiddenInput('slug', $document->getSlug())
       ->addHiddenInput('nodraft', $request->getBool('nodraft'))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Title'))
           ->setValue($content->getTitle())
           ->setError($e_title)
           ->setName('title'))
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel(pht('URI'))
           ->setValue($uri))
       ->appendChild(
         id(new PhabricatorRemarkupControl())
           ->setLabel(pht('Content'))
           ->setValue($content_text)
           ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_TALL)
           ->setName('content')
           ->setID('document-textarea')
           ->setUser($user))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Edit Notes'))
           ->setValue($notes)
           ->setError(null)
           ->setName('description'))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton($cancel_uri)
           ->setValue($submit_button));
 
-    $header = id(new PhabricatorHeaderView())
-      ->setHeader($panel_header);
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Edit Document'))
+      ->setFormError($error_view)
+      ->setForm($form);
 
     $preview = id(new PHUIRemarkupPreviewPanel())
       ->setHeader(pht('Document Preview'))
       ->setPreviewURI('/phriction/preview/')
       ->setControlID('document-textarea')
       ->setSkin('document');
 
     $crumbs = $this->buildApplicationCrumbs();
     if ($document->getID()) {
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName($content->getTitle())
           ->setHref(PhrictionDocument::getSlugURI($document->getSlug())));
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht('Edit')));
     } else {
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht('Create')));
     }
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
         $draft_note,
-        $error_view,
-        $form,
+        $form_box,
         $preview,
       ),
       array(
         'title'   => pht('Edit Document'),
         'device'  => true,
       ));
   }
 
 }
diff --git a/src/applications/phriction/controller/PhrictionMoveController.php b/src/applications/phriction/controller/PhrictionMoveController.php
index 93981b7b2..b870c48d3 100644
--- a/src/applications/phriction/controller/PhrictionMoveController.php
+++ b/src/applications/phriction/controller/PhrictionMoveController.php
@@ -1,152 +1,152 @@
 <?php
 
 /**
  * @group phriction
  */
 final class PhrictionMoveController
   extends PhrictionController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
     $is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business');
 
     if ($this->id) {
       $document = id(new PhrictionDocument())->load($this->id);
     } else {
       $slug = PhabricatorSlug::normalize(
         $request->getStr('slug'));
       if (!$slug) {
         return new Aphront404Response();
       }
 
       $document = id(new PhrictionDocument())->loadOneWhere(
         'slug = %s',
         $slug);
     }
 
     if (!$document) {
       return new Aphront404Response();
     }
 
     if (!isset($slug)) {
       $slug = $document->getSlug();
     }
 
     $target_slug = PhabricatorSlug::normalize(
       $request->getStr('new-slug', $slug));
 
     $submit_uri = $request->getRequestURI()->getPath();
     $cancel_uri = PhrictionDocument::getSlugURI($slug);
 
     $errors = array();
     $error_view = null;
     $e_url = null;
 
     $disallowed_statuses = array(
       PhrictionDocumentStatus::STATUS_DELETED => true, // Silly
       PhrictionDocumentStatus::STATUS_MOVED => true, // Plain silly
       PhrictionDocumentStatus::STATUS_STUB => true, // Utterly silly
     );
     if (isset($disallowed_statuses[$document->getStatus()])) {
       $error_dialog = id(new AphrontDialogView())
         ->setUser($user)
         ->setTitle("Can not move page!")
         ->appendChild(pht('An already moved or deleted document '.
           'can not be moved again.'))
         ->addCancelButton($cancel_uri);
 
       return id(new AphrontDialogResponse())->setDialog($error_dialog);
     }
 
     $content = id(new PhrictionContent())->load($document->getContentID());
 
     if ($request->isFormPost() && !count($errors)) {
       if (!count($errors)) { // First check if the target document exists
         $target_document = id(new PhrictionDocument())->loadOneWhere(
           'slug = %s',
           $target_slug);
 
         // Considering to overwrite existing docs? Nuke this!
         if ($target_document && $target_document->getStatus() ==
           PhrictionDocumentStatus::STATUS_EXISTS) {
 
           $errors[] = pht('Can not overwrite existing target document.');
           $e_url = pht('Already exists.');
         }
       }
 
       if (!count($errors)) { // I like to move it, move it!
         $from_editor = id(PhrictionDocumentEditor::newForSlug($slug))
           ->setActor($user)
           ->setTitle($content->getTitle())
           ->setContent($content->getContent())
           ->setDescription($content->getDescription());
 
         $target_editor = id(PhrictionDocumentEditor::newForSlug(
           $target_slug))
           ->setActor($user)
           ->setTitle($content->getTitle())
           ->setContent($content->getContent())
           ->setDescription($content->getDescription());
 
         // Move it!
         $target_editor->moveHere($document->getID(), $document->getPHID());
 
         // Retrieve the target doc directly from the editor
         // No need to load it per Sql again
         $target_document = $target_editor->getDocument();
         $from_editor->moveAway($target_document->getID());
 
         $redir_uri = PhrictionDocument::getSlugURI($target_document->getSlug());
         return id(new AphrontRedirectResponse())->setURI($redir_uri);
       }
     }
 
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Form Errors'))
         ->setErrors($errors);
     }
 
     $descr_caption = $is_serious ? pht('A reason for the move.') :
       pht('You better give a good reason for this.');
 
-    $form = id(new AphrontFormLayoutView())
+    $form = id(new PHUIFormLayoutView())
       ->setUser($user)
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel(pht('Title'))
           ->setValue($content->getTitle()))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('New URI'))
           ->setValue($target_slug)
           ->setError($e_url)
           ->setName('new-slug')
           ->setCaption(pht('The new location of the document.')))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Edit Notes'))
           ->setValue($content->getDescription())
           ->setError(null)
           ->setName('description')
           ->setCaption($descr_caption));
 
     $dialog = id(new AphrontDialogView())
       ->setUser($user)
       ->setTitle(pht('Move Document'))
       ->appendChild($form)
       ->setSubmitURI($submit_uri)
       ->addSubmitButton(pht('Move Document'))
       ->addCancelButton($cancel_uri);
 
     return id(new AphrontDialogResponse())->setDialog($dialog);
   }
 }
diff --git a/src/applications/phriction/controller/PhrictionNewController.php b/src/applications/phriction/controller/PhrictionNewController.php
index 1d9a3b5b8..0497600ba 100644
--- a/src/applications/phriction/controller/PhrictionNewController.php
+++ b/src/applications/phriction/controller/PhrictionNewController.php
@@ -1,67 +1,67 @@
 <?php
 
 /**
  * @group phriction
  */
 final class PhrictionNewController extends PhrictionController {
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user    = $request->getUser();
     $slug    = PhabricatorSlug::normalize($request->getStr('slug'));
 
     if ($request->isFormPost()) {
       $document = id(new PhrictionDocument())->loadOneWhere(
         'slug = %s',
         $slug);
       $prompt = $request->getStr('prompt', 'no');
       $document_exists = $document && $document->getStatus() ==
         PhrictionDocumentStatus::STATUS_EXISTS;
 
       if ($document_exists && $prompt == 'no') {
         $dialog = new AphrontDialogView();
         $dialog->setSubmitURI('/phriction/new/')
           ->setTitle(pht('Edit Existing Document?'))
           ->setUser($user)
           ->appendChild(pht(
             'The document %s already exists. Do you want to edit it instead?',
             hsprintf('<tt>%s</tt>', $slug)))
           ->addHiddenInput('slug', $slug)
           ->addHiddenInput('prompt', 'yes')
           ->addCancelButton('/w/')
           ->addSubmitButton(pht('Edit Document'));
 
         return id(new AphrontDialogResponse())->setDialog($dialog);
       } else {
         $uri  = '/phriction/edit/?slug='.$slug;
         return id(new AphrontRedirectResponse())
           ->setURI($uri);
       }
     }
 
     if ($slug == '/') {
       $slug = '';
     }
 
-    $view = id(new AphrontFormLayoutView())
+    $view = id(new PHUIFormLayoutView())
       ->appendChild(id(new AphrontFormTextControl())
                        ->setLabel('/w/')
                        ->setValue($slug)
                        ->setName('slug'));
 
     $dialog = id(new AphrontDialogView())
       ->setUser($user)
       ->setTitle(pht('New Document'))
       ->setSubmitURI('/phriction/new/')
       ->appendChild(phutil_tag('p',
         array(),
         pht('Create a new document at')))
       ->appendChild($view)
       ->addSubmitButton(pht('Create'))
       ->addCancelButton('/w/');
 
     return id(new AphrontDialogResponse())->setDialog($dialog);
   }
 
 }
diff --git a/src/applications/ponder/controller/PonderAnswerEditController.php b/src/applications/ponder/controller/PonderAnswerEditController.php
index b25252fdd..aa684801f 100644
--- a/src/applications/ponder/controller/PonderAnswerEditController.php
+++ b/src/applications/ponder/controller/PonderAnswerEditController.php
@@ -1,116 +1,120 @@
 <?php
 
 final class PonderAnswerEditController extends PonderController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $viewer = $request->getUser();
 
     $answer = id(new PonderAnswerQuery())
       ->setViewer($viewer)
       ->withIDs(array($this->id))
       ->requireCapabilities(
         array(
           PhabricatorPolicyCapability::CAN_VIEW,
           PhabricatorPolicyCapability::CAN_EDIT,
         ))
       ->executeOne();
     if (!$answer) {
       return new Aphront404Response();
     }
 
     $v_content = $answer->getContent();
     $e_content = true;
 
 
     $question = $answer->getQuestion();
     $qid = $question->getID();
     $aid = $answer->getID();
 
     $question_uri = "/Q{$qid}#A{$aid}";
 
     $errors = array();
     if ($request->isFormPost()) {
       $v_content = $request->getStr('content');
 
       if (!strlen($v_content)) {
         $errors[] = pht('You must provide some substance in your answer.');
         $e_content = pht('Required');
       }
 
       if (!$errors) {
         $xactions = array();
         $xactions[] = id(new PonderAnswerTransaction())
           ->setTransactionType(PonderAnswerTransaction::TYPE_CONTENT)
           ->setNewValue($v_content);
 
         $editor = id(new PonderAnswerEditor())
           ->setActor($viewer)
           ->setContentSourceFromRequest($request)
           ->setContinueOnNoEffect(true);
 
         $editor->applyTransactions($answer, $xactions);
 
         return id(new AphrontRedirectResponse())
           ->setURI($question_uri);
       }
     }
 
     if ($errors) {
       $errors = id(new AphrontErrorView())->setErrors($errors);
     }
 
     $answer_content_id = celerity_generate_unique_node_id();
 
     $form = id(new AphrontFormView())
       ->setUser($viewer)
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel(pht('Question'))
           ->setValue($question->getTitle()))
       ->appendChild(
         id(new PhabricatorRemarkupControl())
           ->setLabel(pht('Answer'))
           ->setName('content')
           ->setID($answer_content_id)
           ->setValue($v_content)
           ->setError($e_content))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Update Answer'))
           ->addCancelButton($question_uri));
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName("Q{$qid}")
         ->setHref($question_uri));
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName(pht('Edit Answer')));
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Edit Answer'))
+      ->setFormError($errors)
+      ->setForm($form);
+
     $preview = id(new PHUIRemarkupPreviewPanel())
       ->setHeader(pht('Answer Preview'))
       ->setControlID($answer_content_id)
       ->setPreviewURI($this->getApplicationURI('preview/'));
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $errors,
-        $form,
+        $form_box,
         $preview,
       ),
       array(
         'title' => pht('Edit Answer'),
         'device' => true,
       ));
 
   }
 }
diff --git a/src/applications/ponder/controller/PonderQuestionEditController.php b/src/applications/ponder/controller/PonderQuestionEditController.php
index 2a7a8c759..f5661eec6 100644
--- a/src/applications/ponder/controller/PonderQuestionEditController.php
+++ b/src/applications/ponder/controller/PonderQuestionEditController.php
@@ -1,142 +1,145 @@
 <?php
 
 final class PonderQuestionEditController extends PonderController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     if ($this->id) {
       $question = id(new PonderQuestionQuery())
         ->setViewer($user)
         ->withIDs(array($this->id))
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_VIEW,
             PhabricatorPolicyCapability::CAN_EDIT,
           ))
         ->executeOne();
       if (!$question) {
         return new Aphront404Response();
       }
     } else {
       $question = id(new PonderQuestion())
         ->setStatus(PonderQuestionStatus::STATUS_OPEN)
         ->setAuthorPHID($user->getPHID())
         ->setVoteCount(0)
         ->setAnswerCount(0)
         ->setHeat(0.0);
     }
 
     $v_title = $question->getTitle();
     $v_content = $question->getContent();
 
     $errors = array();
     $e_title = true;
     if ($request->isFormPost()) {
       $v_title = $request->getStr('title');
       $v_content = $request->getStr('content');
 
       $len = phutil_utf8_strlen($v_title);
       if ($len < 1) {
         $errors[] = pht('Title must not be empty.');
         $e_title = pht('Required');
       } else if ($len > 255) {
         $errors[] = pht('Title is too long.');
         $e_title = pht('Too Long');
       }
 
       if (!$errors) {
         $template = id(new PonderQuestionTransaction());
         $xactions = array();
 
         $xactions[] = id(clone $template)
           ->setTransactionType(PonderQuestionTransaction::TYPE_TITLE)
           ->setNewValue($v_title);
 
         $xactions[] = id(clone $template)
           ->setTransactionType(PonderQuestionTransaction::TYPE_CONTENT)
           ->setNewValue($v_content);
 
         $editor = id(new PonderQuestionEditor())
           ->setActor($user)
           ->setContentSourceFromRequest($request)
           ->setContinueOnNoEffect(true);
 
         $editor->applyTransactions($question, $xactions);
 
         return id(new AphrontRedirectResponse())
           ->setURI('/Q'.$question->getID());
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Form Errors'))
         ->setErrors($errors);
     }
 
     $form = id(new AphrontFormView())
       ->setUser($user)
-      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Question'))
           ->setName('title')
           ->setValue($v_title)
           ->setError($e_title))
       ->appendChild(
         id(new PhabricatorRemarkupControl())
           ->setName('content')
           ->setID('content')
           ->setValue($v_content)
           ->setLabel(pht('Description'))
           ->setUser($user))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton($this->getApplicationURI())
           ->setValue(pht('Ask Away!')));
 
     $preview = id(new PHUIRemarkupPreviewPanel())
       ->setHeader(pht('Question Preview'))
       ->setControlID('content')
       ->setPreviewURI($this->getApplicationURI('preview/'));
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Ask New Question'))
+      ->setFormError($error_view)
+      ->setForm($form);
+
     $crumbs = $this->buildApplicationCrumbs();
 
     $id = $question->getID();
     if ($id) {
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName("Q{$id}")
           ->setHref("/Q{$id}"));
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht('Edit')));
     } else {
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht('Ask Question')));
     }
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $error_view,
-        $form,
+        $form_box,
         $preview,
       ),
       array(
-        'title'  => pht('Ask a Question'),
+        'title'  => pht('Ask New Question'),
         'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/ponder/view/PonderAddAnswerView.php b/src/applications/ponder/view/PonderAddAnswerView.php
index a5fb0109a..5980f414b 100644
--- a/src/applications/ponder/view/PonderAddAnswerView.php
+++ b/src/applications/ponder/view/PonderAddAnswerView.php
@@ -1,55 +1,54 @@
 <?php
 
 final class PonderAddAnswerView extends AphrontView {
 
   private $question;
   private $actionURI;
   private $draft;
 
   public function setQuestion($question) {
     $this->question = $question;
     return $this;
   }
 
   public function setActionURI($uri) {
     $this->actionURI = $uri;
     return $this;
   }
 
   public function render() {
     $is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business');
 
     $question = $this->question;
 
     $header = id(new PhabricatorHeaderView())
       ->setHeader(pht('Add Answer'));
 
     $form = new AphrontFormView();
     $form
-      ->setFlexible(true)
       ->setUser($this->user)
       ->setAction($this->actionURI)
       ->setWorkflow(true)
       ->addHiddenInput('question_id', $question->getID())
       ->appendChild(
         id(new PhabricatorRemarkupControl())
           ->setName('answer')
           ->setLabel(pht('Answer'))
           ->setError(true)
           ->setID('answer-content')
           ->setUser($this->user))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue($is_serious ?
             pht('Add Answer') :
             pht('Bequeath Wisdom')));
 
     return id(new AphrontNullView())
       ->appendChild(
         array(
           $header,
           $form,
         ))
       ->render();
   }
 }
diff --git a/src/applications/project/controller/PhabricatorProjectCreateController.php b/src/applications/project/controller/PhabricatorProjectCreateController.php
index 899d94eb2..388ac23b8 100644
--- a/src/applications/project/controller/PhabricatorProjectCreateController.php
+++ b/src/applications/project/controller/PhabricatorProjectCreateController.php
@@ -1,128 +1,132 @@
 <?php
 
 final class PhabricatorProjectCreateController
   extends PhabricatorProjectController {
 
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $project = new PhabricatorProject();
     $project->setAuthorPHID($user->getPHID());
     $profile = new PhabricatorProjectProfile();
 
     $e_name = true;
     $errors = array();
     if ($request->isFormPost()) {
 
       try {
         $xactions = array();
 
         $xaction = new PhabricatorProjectTransaction();
         $xaction->setTransactionType(
           PhabricatorProjectTransactionType::TYPE_NAME);
         $xaction->setNewValue($request->getStr('name'));
         $xactions[] = $xaction;
 
         $xaction = new PhabricatorProjectTransaction();
         $xaction->setTransactionType(
           PhabricatorProjectTransactionType::TYPE_MEMBERS);
         $xaction->setNewValue(array($user->getPHID()));
         $xactions[] = $xaction;
 
         $editor = new PhabricatorProjectEditor($project);
         $editor->setActor($user);
         $editor->applyTransactions($xactions);
       } catch (PhabricatorProjectNameCollisionException $ex) {
         $e_name = 'Not Unique';
         $errors[] = $ex->getMessage();
       }
 
       $profile->setBlurb($request->getStr('blurb'));
 
       if (!$errors) {
         $project->save();
         $profile->setProjectPHID($project->getPHID());
         $profile->save();
 
         if ($request->isAjax()) {
           return id(new AphrontAjaxResponse())
             ->setContent(array(
               'phid' => $project->getPHID(),
               'name' => $project->getName(),
             ));
         } else {
           return id(new AphrontRedirectResponse())
             ->setURI('/project/view/'.$project->getID().'/');
         }
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setTitle(pht('Form Errors'));
       $error_view->setErrors($errors);
     }
 
     if ($request->isAjax()) {
-      $form = new AphrontFormLayoutView();
+      $form = new PHUIFormLayoutView();
     } else {
       $form = new AphrontFormView();
       $form->setUser($user);
     }
 
     $form
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Name'))
           ->setName('name')
           ->setValue($project->getName())
           ->setError($e_name))
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setLabel(pht('Blurb'))
           ->setName('blurb')
           ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_SHORT)
           ->setValue($profile->getBlurb()));
 
     if ($request->isAjax()) {
       $dialog = id(new AphrontDialogView())
         ->setUser($user)
         ->setWidth(AphrontDialogView::WIDTH_FORM)
         ->setTitle(pht('Create a New Project'))
         ->appendChild($error_view)
         ->appendChild($form)
         ->addSubmitButton(pht('Create Project'))
         ->addCancelButton('/project/');
 
       return id(new AphrontDialogResponse())->setDialog($dialog);
     } else {
 
       $form
         ->appendChild(
           id(new AphrontFormSubmitControl())
             ->setValue(pht('Create'))
             ->addCancelButton('/project/'));
 
       $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView());
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht('Create Project'))
           ->setHref($this->getApplicationURI().'create/'));
 
+      $form_box = id(new PHUIFormBoxView())
+        ->setHeaderText(pht('Create New Project'))
+        ->setFormError($error_view)
+        ->setForm($form);
+
       return $this->buildApplicationPage(
         array(
           $crumbs,
-          $error_view,
-          $form,
+          $form_box,
         ),
         array(
           'title' => pht('Create New Project'),
           'device' => true,
         ));
     }
   }
 }
diff --git a/src/applications/project/controller/PhabricatorProjectMembersEditController.php b/src/applications/project/controller/PhabricatorProjectMembersEditController.php
index f4448877a..a96d9ff09 100644
--- a/src/applications/project/controller/PhabricatorProjectMembersEditController.php
+++ b/src/applications/project/controller/PhabricatorProjectMembersEditController.php
@@ -1,174 +1,175 @@
 <?php
 
 final class PhabricatorProjectMembersEditController
   extends PhabricatorProjectController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $project = id(new PhabricatorProjectQuery())
       ->setViewer($user)
       ->withIDs(array($this->id))
       ->requireCapabilities(
         array(
           PhabricatorPolicyCapability::CAN_VIEW,
           PhabricatorPolicyCapability::CAN_EDIT,
         ))
       ->executeOne();
     if (!$project) {
       return new Aphront404Response();
     }
     $profile = $project->loadProfile();
     if (empty($profile)) {
       $profile = new PhabricatorProjectProfile();
     }
 
     $member_phids = $project->loadMemberPHIDs();
 
     $errors = array();
     if ($request->isFormPost()) {
       $changed_something = false;
       $member_map = array_fill_keys($member_phids, true);
 
       $remove = $request->getStr('remove');
       if ($remove) {
         if (isset($member_map[$remove])) {
           unset($member_map[$remove]);
           $changed_something = true;
         }
       } else {
         $new_members = $request->getArr('phids');
         foreach ($new_members as $member) {
           if (empty($member_map[$member])) {
             $member_map[$member] = true;
             $changed_something = true;
           }
         }
       }
 
       $xactions = array();
       if ($changed_something) {
         $xaction = new PhabricatorProjectTransaction();
         $xaction->setTransactionType(
           PhabricatorProjectTransactionType::TYPE_MEMBERS);
         $xaction->setNewValue(array_keys($member_map));
         $xactions[] = $xaction;
       }
 
       if ($xactions) {
         $editor = new PhabricatorProjectEditor($project);
         $editor->setActor($user);
         $editor->applyTransactions($xactions);
       }
 
       return id(new AphrontRedirectResponse())
         ->setURI($request->getRequestURI());
     }
 
     $member_phids = array_reverse($member_phids);
     $handles = $this->loadViewerHandles($member_phids);
 
     $state = array();
     foreach ($handles as $handle) {
       $state[] = array(
         'phid' => $handle->getPHID(),
         'name' => $handle->getFullName(),
       );
     }
 
     $header_name = pht('Edit Members');
     $title = pht('Edit Members');
 
     $list = $this->renderMemberList($handles);
 
     $form = new AphrontFormView();
     $form
       ->setUser($user)
-      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setName('phids')
           ->setLabel(pht('Add Members'))
           ->setDatasource('/typeahead/common/users/'))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton('/project/view/'.$project->getID().'/')
           ->setValue(pht('Add Members')));
-    $faux_form = id(new AphrontFormLayoutView())
+    $faux_form = id(new AphrontFormView())
+      ->setUser($user)
       ->appendChild(
         id(new AphrontFormInsetView())
-          ->setTitle(pht('Current Members (%d)', count($handles)))
           ->appendChild($list));
 
-    $box = new PHUIBoxView();
-    $box->appendChild($faux_form);
-    $box->setShadow(true);
-    $box->addPadding(PHUI::PADDING_LARGE);
-    $box->addMargin(PHUI::MARGIN_LARGE);
+    $box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Current Members (%d)', count($handles)))
+      ->setForm($faux_form);
+
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($title)
+      ->setForm($form);
 
     $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView());
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($project->getName())
         ->setHref('/project/view/'.$project->getID().'/'));
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName(pht('Edit Members'))
         ->setHref($this->getApplicationURI()));
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $form,
+        $form_box,
         $box,
       ),
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 
   private function renderMemberList(array $handles) {
     $request = $this->getRequest();
     $user = $request->getUser();
     $list = id(new PhabricatorObjectListView())
       ->setHandles($handles);
 
     foreach ($handles as $handle) {
       $hidden_input = phutil_tag(
         'input',
         array(
           'type' => 'hidden',
           'name' => 'remove',
           'value' => $handle->getPHID(),
         ),
         '');
 
       $button = javelin_tag(
         'button',
         array(
           'class' => 'grey',
         ),
         pht('Remove'));
 
       $list->addButton(
         $handle,
         phabricator_form(
           $user,
           array(
             'method' => 'POST',
             'action' => $request->getRequestURI(),
           ),
           array($hidden_input, $button)));
     }
 
     return $list;
   }
 }
diff --git a/src/applications/project/controller/PhabricatorProjectProfileEditController.php b/src/applications/project/controller/PhabricatorProjectProfileEditController.php
index 0e3e13a84..1973e4a62 100644
--- a/src/applications/project/controller/PhabricatorProjectProfileEditController.php
+++ b/src/applications/project/controller/PhabricatorProjectProfileEditController.php
@@ -1,245 +1,247 @@
 <?php
 
 final class PhabricatorProjectProfileEditController
   extends PhabricatorProjectController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $project = id(new PhabricatorProjectQuery())
       ->setViewer($user)
       ->withIDs(array($this->id))
       ->requireCapabilities(
         array(
           PhabricatorPolicyCapability::CAN_VIEW,
           PhabricatorPolicyCapability::CAN_EDIT,
         ))
       ->executeOne();
     if (!$project) {
       return new Aphront404Response();
     }
 
     $profile = $project->loadProfile();
     if (empty($profile)) {
       $profile = new PhabricatorProjectProfile();
     }
 
     $img_src = $profile->loadProfileImageURI();
 
     $options = PhabricatorProjectStatus::getStatusMap();
 
     $supported_formats = PhabricatorFile::getTransformableImageFormats();
 
     $e_name = true;
     $e_image = null;
 
     $errors = array();
     if ($request->isFormPost()) {
       try {
         $xactions = array();
         $xaction = new PhabricatorProjectTransaction();
         $xaction->setTransactionType(
           PhabricatorProjectTransactionType::TYPE_NAME);
         $xaction->setNewValue($request->getStr('name'));
         $xactions[] = $xaction;
 
         $xaction = new PhabricatorProjectTransaction();
         $xaction->setTransactionType(
           PhabricatorProjectTransactionType::TYPE_STATUS);
         $xaction->setNewValue($request->getStr('status'));
         $xactions[] = $xaction;
 
         $xaction = new PhabricatorProjectTransaction();
         $xaction->setTransactionType(
           PhabricatorProjectTransactionType::TYPE_CAN_VIEW);
         $xaction->setNewValue($request->getStr('can_view'));
         $xactions[] = $xaction;
 
         $xaction = new PhabricatorProjectTransaction();
         $xaction->setTransactionType(
           PhabricatorProjectTransactionType::TYPE_CAN_EDIT);
         $xaction->setNewValue($request->getStr('can_edit'));
         $xactions[] = $xaction;
 
         $xaction = new PhabricatorProjectTransaction();
         $xaction->setTransactionType(
           PhabricatorProjectTransactionType::TYPE_CAN_JOIN);
         $xaction->setNewValue($request->getStr('can_join'));
         $xactions[] = $xaction;
 
         $editor = new PhabricatorProjectEditor($project);
         $editor->setActor($user);
         $editor->applyTransactions($xactions);
       } catch (PhabricatorProjectNameCollisionException $ex) {
         $e_name = pht('Not Unique');
         $errors[] = $ex->getMessage();
       }
 
       $profile->setBlurb($request->getStr('blurb'));
 
       if (!strlen($project->getName())) {
         $e_name = pht('Required');
         $errors[] = pht('Project name is required.');
       } else {
         $e_name = null;
       }
 
       $default_image = $request->getExists('default_image');
       if ($default_image) {
         $profile->setProfileImagePHID(null);
       } else if (!empty($_FILES['image'])) {
         $err = idx($_FILES['image'], 'error');
         if ($err != UPLOAD_ERR_NO_FILE) {
           $file = PhabricatorFile::newFromPHPUpload(
             $_FILES['image'],
             array(
               'authorPHID' => $user->getPHID(),
             ));
           $okay = $file->isTransformableImage();
           if ($okay) {
             $xformer = new PhabricatorImageTransformer();
             $xformed = $xformer->executeThumbTransform(
               $file,
               $x = 50,
               $y = 50);
             $profile->setProfileImagePHID($xformed->getPHID());
           } else {
             $e_image = pht('Not Supported');
             $errors[] =
               pht('This server only supports these image formats:').' '.
               implode(', ', $supported_formats).'.';
           }
         }
       }
 
       if (!$errors) {
         $project->save();
         $profile->setProjectPHID($project->getPHID());
         $profile->save();
         return id(new AphrontRedirectResponse())
           ->setURI('/project/view/'.$project->getID().'/');
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setTitle(pht('Form Errors'));
       $error_view->setErrors($errors);
     }
 
     $header_name = pht('Edit Project');
     $title = pht('Edit Project');
     $action = '/project/edit/'.$project->getID().'/';
 
     $policies = id(new PhabricatorPolicyQuery())
       ->setViewer($user)
       ->setObject($project)
       ->execute();
 
     $form = new AphrontFormView();
     $form
       ->setID('project-edit-form')
       ->setUser($user)
       ->setAction($action)
       ->setEncType('multipart/form-data')
-      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Name'))
           ->setName('name')
           ->setValue($project->getName())
           ->setError($e_name))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Project Status'))
           ->setName('status')
           ->setOptions($options)
           ->setValue($project->getStatus()))
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setLabel(pht('Blurb'))
           ->setName('blurb')
           ->setValue($profile->getBlurb()))
       ->appendChild(hsprintf(
         '<p class="aphront-form-instructions">%s</p>',
         pht(
           'NOTE: Policy settings are not yet fully implemented. '.
           'Some interfaces still ignore these settings, '.
           'particularly "Visible To".')))
       ->appendChild(
         id(new AphrontFormPolicyControl())
           ->setUser($user)
           ->setName('can_view')
           ->setCaption(pht('Members can always view a project.'))
           ->setPolicyObject($project)
           ->setPolicies($policies)
           ->setCapability(PhabricatorPolicyCapability::CAN_VIEW))
       ->appendChild(
         id(new AphrontFormPolicyControl())
           ->setUser($user)
           ->setName('can_edit')
           ->setPolicyObject($project)
           ->setPolicies($policies)
           ->setCapability(PhabricatorPolicyCapability::CAN_EDIT))
       ->appendChild(
         id(new AphrontFormPolicyControl())
           ->setUser($user)
           ->setName('can_join')
           ->setCaption(
             pht('Users who can edit a project can always join a project.'))
           ->setPolicyObject($project)
           ->setPolicies($policies)
           ->setCapability(PhabricatorPolicyCapability::CAN_JOIN))
       ->appendChild(
         id(new AphrontFormMarkupControl())
           ->setLabel(pht('Profile Image'))
           ->setValue(
             phutil_tag(
               'img',
               array(
                 'src' => $img_src,
               ))))
       ->appendChild(
         id(new AphrontFormImageControl())
           ->setLabel(pht('Change Image'))
           ->setName('image')
           ->setError($e_image)
           ->setCaption(
             pht('Supported formats:').' '.implode(', ', $supported_formats)))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton('/project/view/'.$project->getID().'/')
           ->setValue(pht('Save')));
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($title)
+      ->setFormError($error_view)
+      ->setForm($form);
 
     $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView());
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($project->getName())
         ->setHref('/project/view/'.$project->getID().'/'));
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName(pht('Edit Project'))
         ->setHref($this->getApplicationURI()));
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $error_view,
-        $form,
+        $form_box,
       ),
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 }
diff --git a/src/applications/releeph/controller/project/ReleephProjectCreateController.php b/src/applications/releeph/controller/project/ReleephProjectCreateController.php
index 04c456786..64a686e88 100644
--- a/src/applications/releeph/controller/project/ReleephProjectCreateController.php
+++ b/src/applications/releeph/controller/project/ReleephProjectCreateController.php
@@ -1,169 +1,168 @@
 <?php
 
 final class ReleephProjectCreateController extends ReleephProjectController {
 
   public function processRequest() {
     $request = $this->getRequest();
     $name = trim($request->getStr('name'));
     $trunk_branch = trim($request->getStr('trunkBranch'));
     $arc_pr_id = $request->getInt('arcPrID');
 
     $arc_projects = $this->loadArcProjects();
 
     $e_name = true;
     $e_trunk_branch = true;
     $errors = array();
 
     if ($request->isFormPost()) {
       if (!$name) {
         $e_name = pht('Required');
         $errors[] = pht(
           'Your Releeph project should have a simple descriptive name.');
       }
 
       if (!$trunk_branch) {
         $e_trunk_branch = pht('Required');
         $errors[] = pht(
           'You must specify which branch you will be picking from.');
       }
 
       $arc_project = $arc_projects[$arc_pr_id];
       $pr_repository = $arc_project->loadRepository();
 
       if (!$errors) {
         $releeph_project = id(new ReleephProject())
           ->setName($name)
           ->setTrunkBranch($trunk_branch)
           ->setRepositoryPHID($pr_repository->getPHID())
           ->setArcanistProjectID($arc_project->getID())
           ->setCreatedByUserPHID($request->getUser()->getPHID())
           ->setIsActive(1);
 
         try {
           $releeph_project->save();
 
           return id(new AphrontRedirectResponse())
             ->setURI($releeph_project->getURI());
         } catch (AphrontQueryDuplicateKeyException $ex) {
           $e_name = pht('Not Unique');
           $errors[] = pht(
             'Another project already uses this name.');
         }
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setErrors($errors);
     }
 
     $arc_project_options = $this->getArcProjectSelectOptions($arc_projects);
 
     $project_name_input = id(new AphrontFormTextControl())
       ->setLabel(pht('Name'))
       ->setDisableAutocomplete(true)
       ->setName('name')
       ->setValue($name)
       ->setError($e_name)
       ->setCaption(pht('A name like "Thrift" but not "Thrift releases".'));
 
     $arc_project_input = id(new AphrontFormSelectControl())
       ->setLabel(pht('Arc Project'))
       ->setName('arcPrID')
       ->setValue($arc_pr_id)
       ->setCaption(pht(
         'If your Arc project isn\'t listed, associate it with a repository %s',
         phutil_tag(
           'a',
           array(
             'href' => '/repository/',
             'target' => '_blank',
           ),
           'here')))
       ->setOptions($arc_project_options);
 
     $branch_name_preview = id(new ReleephBranchPreviewView())
       ->setLabel(pht('Example Branch'))
       ->addControl('projectName', $project_name_input)
       ->addControl('arcProjectID', $arc_project_input)
       ->addStatic('template', '')
       ->addStatic('isSymbolic', false);
 
     $form = id(new AphrontFormView())
       ->setUser($request->getUser())
-      ->setFlexible(true)
       ->appendChild($project_name_input)
       ->appendChild($arc_project_input)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Trunk'))
           ->setName('trunkBranch')
           ->setValue($trunk_branch)
           ->setError($e_trunk_branch)
           ->setCaption(pht('The development branch, '.
               'from which requests will be picked.')))
       ->appendChild($branch_name_preview)
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton('/releeph/project/')
           ->setValue(pht('Create')));
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName(pht('New Project')));
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
         $error_view,
         $form,
       ),
       array(
         'title' => pht('Create New Project'),
         'device' => true,
       ));
   }
 
   private function loadArcProjects() {
     $viewer = $this->getRequest()->getUser();
 
     $projects = id(new PhabricatorRepositoryArcanistProjectQuery())
       ->setViewer($viewer)
       ->needRepositories(true)
       ->execute();
 
     $projects = mfilter($projects, 'getRepository');
     $projects = msort($projects, 'getName');
 
     return $projects;
   }
 
   private function getArcProjectSelectOptions(array $arc_projects) {
     assert_instances_of($arc_projects, 'PhabricatorRepositoryArcanistProject');
 
     $repos = mpull($arc_projects, 'getRepository');
     $repos = mpull($repos, null, 'getID');
 
     $groups = array();
     foreach ($arc_projects as $arc_project) {
       $id = $arc_project->getID();
       $repo_id = $arc_project->getRepository()->getID();
       $groups[$repo_id][$id] = $arc_project->getName();
     }
 
     $choices = array();
     foreach ($groups as $repo_id => $group) {
       $repo_name = $repos[$repo_id]->getName();
       $callsign = $repos[$repo_id]->getCallsign();
       $name = "r{$callsign} ({$repo_name})";
       $choices[$name] = $group;
     }
 
     ksort($choices);
 
     return $choices;
   }
 
 }
diff --git a/src/applications/repository/controller/PhabricatorRepositoryCreateController.php b/src/applications/repository/controller/PhabricatorRepositoryCreateController.php
index 67bb810a6..d49728a76 100644
--- a/src/applications/repository/controller/PhabricatorRepositoryCreateController.php
+++ b/src/applications/repository/controller/PhabricatorRepositoryCreateController.php
@@ -1,121 +1,119 @@
 <?php
 
 final class PhabricatorRepositoryCreateController
   extends PhabricatorRepositoryController {
 
   public function processRequest() {
 
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $e_name = true;
     $e_callsign = true;
 
     $repository = new PhabricatorRepository();
 
     $type_map = PhabricatorRepositoryType::getAllRepositoryTypes();
     $errors = array();
 
     if ($request->isFormPost()) {
 
       $repository->setName($request->getStr('name'));
       $repository->setCallsign($request->getStr('callsign'));
       $repository->setVersionControlSystem($request->getStr('type'));
 
       if (!strlen($repository->getName())) {
         $e_name = 'Required';
         $errors[] = 'Repository name is required.';
       } else {
         $e_name = null;
       }
 
       if (!strlen($repository->getCallsign())) {
         $e_callsign = 'Required';
         $errors[] = 'Callsign is required.';
       } else if (!preg_match('/^[A-Z]+$/', $repository->getCallsign())) {
         $e_callsign = 'Invalid';
         $errors[] = 'Callsign must be ALL UPPERCASE LETTERS.';
       } else {
         $e_callsign = null;
       }
 
       if (empty($type_map[$repository->getVersionControlSystem()])) {
         $errors[] = 'Invalid version control system.';
       }
 
       if (!$errors) {
         try {
           $repository->save();
 
           return id(new AphrontRedirectResponse())
             ->setURI('/repository/edit/'.$repository->getID().'/');
 
         } catch (AphrontQueryDuplicateKeyException $ex) {
           $e_callsign = 'Duplicate';
           $errors[] = 'Callsign must be unique. Another repository already '.
                       'uses that callsign.';
         }
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setErrors($errors);
       $error_view->setTitle('Form Errors');
     }
 
-
     $form = new AphrontFormView();
     $form
       ->setUser($user)
       ->setAction('/repository/create/')
-      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel('Name')
           ->setName('name')
           ->setValue($repository->getName())
           ->setError($e_name)
           ->setCaption('Human-readable repository name.'))
       ->appendChild(hsprintf(
         '<p class="aphront-form-instructions">Select a "Callsign" &mdash; a '.
         'short, uppercase string to identify revisions in this repository. If '.
         'you choose "EX", revisions in this repository will be identified '.
         'with the prefix "rEX".</p>'))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel('Callsign')
           ->setName('callsign')
           ->setValue($repository->getCallsign())
           ->setError($e_callsign)
           ->setCaption(
             'Short, UPPERCASE identifier. Once set, it can not be changed.'))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel('Type')
           ->setName('type')
           ->setOptions($type_map)
           ->setValue($repository->getVersionControlSystem()))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue('Create Repository')
           ->addCancelButton('/repository/'));
 
-    $header = id(new PhabricatorHeaderView())
-      ->setHeader(pht('Create Repository'));
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Create Repository'))
+      ->setFormError($error_view)
+      ->setForm($form);
 
     return $this->buildApplicationPage(
       array(
-        $error_view,
-        $header,
-        $form,
+        $form_box,
       ),
       array(
         'title' => pht('Create Repository'),
         'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/repository/controller/PhabricatorRepositoryEditController.php b/src/applications/repository/controller/PhabricatorRepositoryEditController.php
index 11ec24fd6..e37fd9a05 100644
--- a/src/applications/repository/controller/PhabricatorRepositoryEditController.php
+++ b/src/applications/repository/controller/PhabricatorRepositoryEditController.php
@@ -1,693 +1,692 @@
 <?php
 
 final class PhabricatorRepositoryEditController
   extends PhabricatorRepositoryController {
 
   private $id;
   private $view;
   private $repository;
   private $sideNav;
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
     $this->view = idx($data, 'view');
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
 
     $repository = id(new PhabricatorRepository())->load($this->id);
     if (!$repository) {
       return new Aphront404Response();
     }
 
     $views = array(
       'basic'     => 'Basics',
       'tracking'  => 'Tracking',
     );
 
     $this->repository = $repository;
 
     if (!isset($views[$this->view])) {
       $this->view = head_key($views);
     }
 
     $nav = new AphrontSideNavFilterView();
     $base_uri = new PhutilURI('/repository/edit/'.$repository->getID().'/');
     $nav->setBaseURI($base_uri);
     foreach ($views as $view => $name) {
       $nav->addFilter($view, $name);
     }
     $nav->selectFilter($this->view, null);
 
     $nav->appendChild($this->renderDaemonNotice());
 
     $this->sideNav = $nav;
 
     switch ($this->view) {
       case 'basic':
         return $this->processBasicRequest();
       case 'tracking':
         return $this->processTrackingRequest();
       default:
         throw new Exception("Unknown view.");
     }
   }
 
   protected function processBasicRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
     $repository = $this->repository;
     $repository_id = $repository->getID();
 
     $errors = array();
 
     $e_name = true;
 
     if ($request->isFormPost()) {
       $repository->setName($request->getStr('name'));
 
       if (!strlen($repository->getName())) {
         $e_name = 'Required';
         $errors[] = 'Repository name is required.';
       } else {
         $e_name = null;
       }
 
       $repository->setDetail('description', $request->getStr('description'));
       $repository->setDetail('encoding', $request->getStr('encoding'));
 
       if (!$errors) {
         $repository->save();
         return id(new AphrontRedirectResponse())
           ->setURI('/repository/edit/'.$repository_id.'/basic/?saved=true');
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setErrors($errors);
       $error_view->setTitle('Form Errors');
     } else if ($request->getStr('saved')) {
       $error_view = new AphrontErrorView();
       $error_view->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
       $error_view->setTitle('Changes Saved');
       $error_view->appendChild('Repository changes were saved.');
     }
 
     $encoding_doc_link = PhabricatorEnv::getDoclink(
         'article/User_Guide_UTF-8_and_Character_Encoding.html');
 
     $form = new AphrontFormView();
     $form
       ->setUser($user)
       ->setAction('/repository/edit/'.$repository->getID().'/')
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel('Name')
           ->setName('name')
           ->setValue($repository->getName())
           ->setError($e_name)
           ->setCaption('Human-readable repository name.'))
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setLabel('Description')
           ->setName('description')
           ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_SHORT)
           ->setValue($repository->getDetail('description')))
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel('Callsign')
           ->setName('callsign')
           ->setValue($repository->getCallsign()))
       ->appendChild(hsprintf('
         <p class="aphront-form-instructions">'.
           'If source code in this repository uses a character '.
           'encoding other than UTF-8 (for example, ISO-8859-1), '.
           'specify it here. You can usually leave this field blank. '.
           'See User Guide: '.
           '<a href="%s">UTF-8 and Character Encoding</a> for more information.'.
         '</p>',
         $encoding_doc_link))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel('Encoding')
           ->setName('encoding')
           ->setValue($repository->getDetail('encoding')))
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel('Type')
           ->setName('type')
           ->setValue($repository->getVersionControlSystem()))
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel('ID')
           ->setValue($repository->getID()))
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel('PHID')
           ->setValue($repository->getPHID()))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue('Save'));
 
     $nav = $this->sideNav;
 
-    $header = id(new PhabricatorHeaderView())
-      ->setHeader(pht('Edit Repository'));
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Edit Repository'))
+      ->setFormError($error_view)
+      ->setForm($form);
 
-    $nav->appendChild($error_view);
-    $nav->appendChild($header);
-    $nav->appendChild($form);
+    $nav->appendChild($form_box);
 
     return $this->buildApplicationPage(
       $nav,
       array(
         'title' => pht('Edit Repository'),
         'device' => true,
       ));
   }
 
   private function processTrackingRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
     $repository = $this->repository;
     $repository_id = $repository->getID();
 
     $errors = array();
 
     $e_uri = null;
     $e_path = null;
 
     $is_git = false;
     $is_svn = false;
     $is_mercurial = false;
 
     $e_ssh_key = null;
     $e_ssh_keyfile = null;
     $e_branch = null;
 
     switch ($repository->getVersionControlSystem()) {
       case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
         $is_git = true;
         break;
       case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
         $is_svn = true;
         break;
       case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
         $is_mercurial = true;
         break;
       default:
         throw new Exception("Unsupported VCS!");
     }
 
     $has_branches       = ($is_git || $is_mercurial);
     $has_local          = ($is_git || $is_mercurial);
     $has_branch_filter  = ($is_git);
     $has_auth_support   = $is_svn;
 
     if ($request->isFormPost()) {
       $tracking = ($request->getStr('tracking') == 'enabled' ? true : false);
       $repository->setDetail('tracking-enabled', $tracking);
       $repository->setDetail('remote-uri', $request->getStr('uri'));
       if ($has_local) {
         $repository->setDetail('local-path', $request->getStr('path'));
       }
 
       if ($has_branch_filter) {
         $branch_filter = $request->getStrList('branch-filter');
         $branch_filter = array_fill_keys($branch_filter, true);
 
         $repository->setDetail('branch-filter', $branch_filter);
 
         $close_commits_filter = $request->getStrList('close-commits-filter');
         $close_commits_filter = array_fill_keys($close_commits_filter, true);
 
         $repository->setDetail('close-commits-filter', $close_commits_filter);
       }
 
       $repository->setDetail(
         'disable-autoclose',
         $request->getStr('autoclose') == 'disabled' ? true : false);
 
       $repository->setDetail(
         'pull-frequency',
         max(1, $request->getInt('frequency')));
 
       if ($has_branches) {
         $repository->setDetail(
           'default-branch',
           $request->getStr('default-branch'));
         if ($is_git) {
           $branch_name = $repository->getDetail('default-branch');
           if (strpos($branch_name, '/') !== false) {
             $e_branch = 'Invalid';
             $errors[] = "Your branch name should not specify an explicit ".
                         "remote. For instance, use 'master', not ".
                         "'origin/master'.";
           }
         }
       }
 
       $repository->setDetail(
         'default-owners-path',
         $request->getStr(
           'default-owners-path',
           '/'));
 
       $repository->setDetail('ssh-login', $request->getStr('ssh-login'));
       $repository->setDetail('ssh-key', $request->getStr('ssh-key'));
       $repository->setDetail('ssh-keyfile', $request->getStr('ssh-keyfile'));
 
       $repository->setDetail('http-login', $request->getStr('http-login'));
       $repository->setDetail('http-pass',  $request->getStr('http-pass'));
 
       $repository->setDetail('show-user', $request->getInt('show-user'));
 
       if ($repository->getDetail('ssh-key') &&
           $repository->getDetail('ssh-keyfile')) {
         $errors[] =
           "Specify only one of 'SSH Private Key' and 'SSH Private Key File', ".
           "not both.";
         $e_ssh_key = 'Choose Only One';
         $e_ssh_keyfile = 'Choose Only One';
       }
 
       $repository->setDetail(
         'herald-disabled',
         $request->getInt('herald-disabled', 0));
 
       if ($is_svn) {
         $repository->setUUID($request->getStr('uuid'));
         $subpath = ltrim($request->getStr('svn-subpath'), '/');
         if ($subpath) {
           $subpath = rtrim($subpath, '/').'/';
         }
         $repository->setDetail('svn-subpath', $subpath);
       }
 
       if ($tracking) {
         if (!$repository->getDetail('remote-uri')) {
           $e_uri = 'Required';
           $errors[] = "Repository URI is required.";
         } else if ($is_svn &&
           !preg_match('@/$@', $repository->getDetail('remote-uri'))) {
 
           $e_uri = 'Invalid';
           $errors[] = 'Subversion Repository Root must end in a slash ("/").';
         } else {
           $e_uri = null;
         }
 
         if ($has_local) {
           if (!$repository->getDetail('local-path')) {
             $e_path = 'Required';
             $errors[] = "Local path is required.";
           } else {
             $e_path = null;
           }
         }
       }
 
       if (!$errors) {
         $repository->save();
         return id(new AphrontRedirectResponse())
           ->setURI('/repository/edit/'.$repository_id.'/tracking/?saved=true');
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setErrors($errors);
       $error_view->setTitle('Form Errors');
     } else if ($request->getStr('saved')) {
       $error_view = new AphrontErrorView();
       $error_view->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
       $error_view->setTitle('Changes Saved');
       $error_view->appendChild('Tracking changes were saved.');
     } else if (!$repository->isTracked()) {
       $error_view = new AphrontErrorView();
       $error_view->setSeverity(AphrontErrorView::SEVERITY_WARNING);
       $error_view->setTitle('Repository Not Tracked');
       $error_view->appendChild(
         'Tracking is currently "Disabled" for this repository, so it will '.
         'not be imported into Phabricator. You can enable it below.');
     }
 
     switch ($repository->getVersionControlSystem()) {
       case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
         $is_git = true;
         break;
       case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
         $is_svn = true;
         break;
     }
 
     $doc_href = PhabricatorEnv::getDoclink('article/Diffusion_User_Guide.html');
     $user_guide_link = phutil_tag(
       'a',
       array(
         'href' => $doc_href,
       ),
       'Diffusion User Guide');
 
     $form = new AphrontFormView();
     $form
       ->setUser($user)
       ->setAction('/repository/edit/'.$repository->getID().'/tracking/')
-      ->setFlexible(true)
       ->appendChild(hsprintf(
         '<p class="aphront-form-instructions">Phabricator can track '.
         'repositories, importing commits as they happen and notifying '.
         'Differential, Diffusion, Herald, and other services. To enable '.
         'tracking for a repository, configure it here and then start (or '.
         'restart) the daemons. More information is available in the '.
         '<strong>%s</strong>.</p>',
         $user_guide_link));
 
     $form
       ->appendChild(
         id(new AphrontFormInsetView())
           ->setTitle('Basics')
           ->appendChild(id(new AphrontFormStaticControl())
             ->setLabel('Repository Name')
             ->setValue($repository->getName()))
           ->appendChild(id(new AphrontFormSelectControl())
             ->setName('tracking')
             ->setLabel('Tracking')
             ->setOptions(array(
                 'disabled'  => 'Disabled',
                 'enabled'   => 'Enabled',
                 ))
             ->setValue(
               $repository->isTracked()
               ? 'enabled'
               : 'disabled')));
 
     $inset = new AphrontFormInsetView();
     $inset->setTitle('Remote URI');
 
     $clone_command = null;
     $fetch_command = null;
     if ($is_git) {
       $clone_command = 'git clone';
       $fetch_command = 'git fetch';
     } else if ($is_mercurial) {
       $clone_command = 'hg clone';
       $fetch_command = 'hg pull';
     }
 
     $uri_label = 'Repository URI';
     if ($has_local) {
       if ($is_git) {
         $instructions = hsprintf(
           'Enter the URI to clone this repository from. It should look like '.
           '<tt>git@github.com:example/example.git</tt>, '.
           '<tt>ssh://user@host.com/git/example.git</tt>, or '.
           '<tt>file:///local/path/to/repo</tt>');
       } else if ($is_mercurial) {
         $instructions = hsprintf(
           'Enter the URI to clone this repository from. It should look '.
           'something like <tt>ssh://user@host.com/hg/example</tt>');
       }
       $inset->appendChild(hsprintf(
         '<p class="aphront-form-instructions">%s</p>',
         $instructions));
     } else if ($is_svn) {
       $instructions = hsprintf(
         'Enter the <strong>Repository Root</strong> for this SVN repository. '.
         'You can figure this out by running <tt>svn info</tt> and looking at '.
         'the value in the <tt>Repository Root</tt> field. It should be a URI '.
         'and look like <tt>http://svn.example.org/svn/</tt>, '.
         '<tt>svn+ssh://svn.example.com/svnroot/</tt>, or '.
         '<tt>svn://svn.example.net/svn/</tt>');
       $inset->appendChild(hsprintf(
         '<p class="aphront-form-instructions">%s</p>',
         $instructions));
       $uri_label = 'Repository Root';
     }
 
     $inset
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setName('uri')
           ->setLabel($uri_label)
           ->setID('remote-uri')
           ->setValue($repository->getDetail('remote-uri'))
           ->setError($e_uri));
 
     $inset->appendChild(
       id(new AphrontFormCheckboxControl())
       ->addCheckbox(
         'show-user',
         1,
         pht('Permit users to view the username of this connection.'),
         $repository->getDetail('show-user') == 1));
 
     $inset->appendChild(hsprintf(
       '<div class="aphront-form-instructions">'.
         'If you want to connect to this repository over SSH, enter the '.
         'username and private key to use. You can leave these fields blank if '.
         'the repository does not use SSH.'.
       '</div>'));
 
     $inset
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setName('ssh-login')
           ->setLabel('SSH User')
           ->setValue($repository->getDetail('ssh-login')))
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setName('ssh-key')
           ->setLabel('SSH Private Key')
           ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_SHORT)
           ->setValue($repository->getDetail('ssh-key'))
           ->setError($e_ssh_key)
           ->setCaption(
             hsprintf('Specify the entire private key, <em>or</em>...')))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setName('ssh-keyfile')
           ->setLabel('SSH Private Key File')
           ->setValue($repository->getDetail('ssh-keyfile'))
           ->setError($e_ssh_keyfile)
           ->setCaption(
             '...specify a path on disk where the daemon should '.
             'look for a private key.'));
 
     if ($has_auth_support) {
       $inset
         ->appendChild(hsprintf(
           '<div class="aphront-form-instructions">'.
             'If you want to connect to this repository with a username and '.
             'password, such as over HTTP Basic Auth or SVN with SASL, '.
             'enter the username and password to use. You can leave these '.
             'fields blank if the repository does not use a username and '.
             'password for authentication.'.
           '</div>'))
         ->appendChild(
           id(new AphrontFormTextControl())
             ->setName('http-login')
             ->setLabel('Username')
             ->setValue($repository->getDetail('http-login')))
         ->appendChild(
           id(new AphrontFormPasswordControl())
             ->setName('http-pass')
             ->setLabel('Password')
             ->setValue($repository->getDetail('http-pass')));
     }
 
     $inset
       ->appendChild(hsprintf(
         '<div class="aphront-form-important">'.
           'To test your authentication configuration, <strong>save this '.
           'form</strong> and then run this script:'.
           '<code>'.
             'phabricator/ $ ./scripts/repository/test_connection.php %s'.
           '</code>'.
           'This will verify that your configuration is correct and the '.
           'daemons can connect to the remote repository and pull changes '.
           'from it.'.
         '</div>',
         $repository->getCallsign()));
 
     $form->appendChild($inset);
 
     $inset = new AphrontFormInsetView();
     $inset->setTitle('Repository Information');
 
     if ($has_local) {
       $default_local_path = '';
       $default =
         PhabricatorEnv::getEnvConfig('repository.default-local-path');
       if (!$repository->getDetail('remote-uri') && $default) {
         $default_local_path = $default.strtolower($repository->getCallsign());
       }
       $inset->appendChild(hsprintf(
         '<p class="aphront-form-instructions">Select a path on local disk '.
         'which the daemons should <tt>%s</tt> the repository into. This must '.
         'be readable and writable by the daemons, and readable by the '.
         'webserver. The daemons will <tt>%s</tt> and keep this repository up '.
         'to date.</p>',
         $clone_command,
         $fetch_command));
       $inset->appendChild(
         id(new AphrontFormTextControl())
           ->setName('path')
           ->setLabel('Local Path')
           ->setValue($repository->getDetail('local-path', $default_local_path))
           ->setError($e_path));
     } else if ($is_svn) {
       $inset->appendChild(hsprintf(
         '<p class="aphront-form-instructions">If you only want to parse one '.
         'subpath of the repository, specify it here, relative to the '.
         'repository root (e.g., <tt>trunk/</tt> or <tt>projects/wheel/</tt>). '.
         'If you want to parse multiple subdirectories, create a separate '.
         'Phabricator repository for each one.</p>'));
       $inset->appendChild(
         id(new AphrontFormTextControl())
           ->setName('svn-subpath')
           ->setLabel('Subpath')
           ->setValue($repository->getDetail('svn-subpath'))
           ->setError($e_path));
     }
 
     if ($has_branch_filter) {
       $branch_filter_str = implode(
         ', ',
         array_keys($repository->getDetail('branch-filter', array())));
       $inset
         ->appendChild(
           id(new AphrontFormTextControl())
             ->setName('branch-filter')
             ->setLabel('Track Only')
             ->setValue($branch_filter_str)
             ->setCaption(hsprintf(
               'Optional list of branches to track. Other branches will be '.
               'completely ignored. If left empty, all branches are tracked. '.
               'Example: <tt>master, release</tt>')));
     }
 
     $inset
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setName('frequency')
           ->setLabel('Pull Frequency')
           ->setValue($repository->getDetail('pull-frequency', 15))
           ->setCaption(
             'Number of seconds daemon should sleep between requests. Larger '.
             'numbers reduce load but also decrease responsiveness.'));
 
     $form->appendChild($inset);
 
     $inset = new AphrontFormInsetView();
     $inset->setTitle('Application Configuration');
 
     if ($has_branches) {
       $inset
         ->appendChild(
           id(new AphrontFormTextControl())
             ->setName('default-branch')
             ->setLabel('Default Branch')
             ->setValue($repository->getDefaultBranch())
             ->setError($e_branch)
             ->setCaption(
               'Default branch to show in Diffusion.'));
     }
 
     $inset
       ->appendChild(id(new AphrontFormSelectControl())
         ->setName('autoclose')
         ->setLabel('Autoclose')
         ->setOptions(array(
             'enabled'   => 'Enabled: Automatically Close Pushed Revisions',
             'disabled'  => 'Disabled: Ignore Pushed Revisions',
             ))
         ->setCaption(
           "Automatically close Differential revisions when associated commits ".
           "are pushed to this repository.")
         ->setValue(
           $repository->getDetail('disable-autoclose', false)
           ? 'disabled'
           : 'enabled'));
 
     if ($has_branch_filter) {
       $close_commits_filter_str = implode(
           ', ',
           array_keys($repository->getDetail('close-commits-filter', array())));
       $inset
         ->appendChild(
           id(new AphrontFormTextControl())
             ->setName('close-commits-filter')
             ->setLabel('Autoclose Branches')
             ->setValue($close_commits_filter_str)
             ->setCaption(
               'Optional list of branches which can trigger autoclose. '.
               'If left empty, all branches trigger autoclose.'));
     }
 
     $inset
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setName('default-owners-path')
           ->setLabel('Default Owners Path')
           ->setValue(
             $repository->getDetail(
               'default-owners-path',
               '/'))
           ->setCaption('Default path in Owners tool.'));
 
     $inset
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setName('herald-disabled')
           ->setLabel('Herald/Feed Enabled')
           ->setValue($repository->getDetail('herald-disabled', 0))
           ->setOptions(
             array(
               0 => 'Enabled - Send Email and Publish Stories',
               1 => 'Disabled - Do Not Send Email or Publish Stories',
             ))
           ->setCaption(
             'You can disable Herald commit notifications and feed stories '.
             'for this repository. This can be useful when initially importing '.
             'a repository. Feed stories are never published about commits '.
             'that are more than 24 hours old.'));
 
     if ($is_svn) {
       $inset
         ->appendChild(
           id(new AphrontFormTextControl())
             ->setName('uuid')
             ->setLabel('UUID')
             ->setValue($repository->getUUID())
             ->setCaption(hsprintf('Repository UUID from <tt>svn info</tt>.')));
     }
 
     $form->appendChild($inset);
 
     $form
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue('Save Configuration'));
 
     $header = id(new PhabricatorHeaderView())
       ->setHeader(pht('Edit Repository Tracking'));
 
     $nav = $this->sideNav;
     $nav->appendChild($error_view);
     $nav->appendChild($header);
     $nav->appendChild($form);
 
     return $this->buildApplicationPage(
       $nav,
       array(
         'title' => pht('Edit Repository Tracking'),
       ));
   }
 
 }
diff --git a/src/applications/search/controller/PhabricatorApplicationSearchController.php b/src/applications/search/controller/PhabricatorApplicationSearchController.php
index 969bb7c24..dfc97ec9c 100644
--- a/src/applications/search/controller/PhabricatorApplicationSearchController.php
+++ b/src/applications/search/controller/PhabricatorApplicationSearchController.php
@@ -1,336 +1,335 @@
 <?php
 
 final class PhabricatorApplicationSearchController
   extends PhabricatorSearchBaseController {
 
   private $searchEngine;
   private $navigation;
   private $queryKey;
   private $preface;
 
   public function setPreface($preface) {
     $this->preface = $preface;
     return $this;
   }
 
   public function getPreface() {
     return $this->preface;
   }
 
   public function setQueryKey($query_key) {
     $this->queryKey = $query_key;
     return $this;
   }
 
   protected function getQueryKey() {
     return $this->queryKey;
   }
 
   public function setNavigation(AphrontSideNavFilterView $navigation) {
     $this->navigation = $navigation;
     return $this;
   }
 
   protected function getNavigation() {
     return $this->navigation;
   }
 
   public function setSearchEngine(
     PhabricatorApplicationSearchEngine $search_engine) {
     $this->searchEngine = $search_engine;
     return $this;
   }
 
   protected function getSearchEngine() {
     return $this->searchEngine;
   }
 
   protected function validateDelegatingController() {
     $parent = $this->getDelegatingController();
 
     if (!$parent) {
       throw new Exception(
         "You must delegate to this controller, not invoke it directly.");
     }
 
     $engine = $this->getSearchEngine();
     if (!$engine) {
       throw new Exception(
         "Call setEngine() before delegating to this controller!");
     }
 
     $nav = $this->getNavigation();
     if (!$nav) {
       throw new Exception(
         "Call setNavigation() before delegating to this controller!");
     }
 
     $engine->setViewer($this->getRequest()->getUser());
 
     $parent = $this->getDelegatingController();
     $interface = 'PhabricatorApplicationSearchResultsControllerInterface';
     if (!$parent instanceof $interface) {
       throw new Exception(
         "Delegating controller must implement '{$interface}'.");
     }
   }
 
   public function processRequest() {
     $this->validateDelegatingController();
 
     $key = $this->getQueryKey();
     if ($key == 'edit') {
       return $this->processEditRequest();
     } else {
       return $this->processSearchRequest();
     }
   }
 
   private function processSearchRequest() {
     $parent = $this->getDelegatingController();
     $request = $this->getRequest();
     $user = $request->getUser();
     $engine = $this->getSearchEngine();
     $nav = $this->getNavigation();
 
     if ($request->isFormPost()) {
       $saved_query = $engine->buildSavedQueryFromRequest($request);
       $this->saveQuery($saved_query);
       return id(new AphrontRedirectResponse())->setURI(
         $engine->getQueryResultsPageURI($saved_query->getQueryKey()));
     }
 
     $named_query = null;
     $run_query = true;
     $query_key = $this->queryKey;
     if ($this->queryKey == 'advanced') {
       $run_query = false;
       $query_key = $request->getStr('query');
     } else if (!strlen($this->queryKey)) {
       $query_key = head_key($engine->loadEnabledNamedQueries());
     }
 
     if ($engine->isBuiltinQuery($query_key)) {
       $saved_query = $engine->buildSavedQueryFromBuiltin($query_key);
       $named_query = idx($engine->loadEnabledNamedQueries(), $query_key);
     } else if ($query_key) {
       $saved_query = id(new PhabricatorSavedQueryQuery())
         ->setViewer($user)
         ->withQueryKeys(array($query_key))
         ->executeOne();
 
       if (!$saved_query) {
         return new Aphront404Response();
       }
 
       $named_query = idx($engine->loadEnabledNamedQueries(), $query_key);
     } else {
       $saved_query = $engine->buildSavedQueryFromRequest($request);
     }
 
     $nav->selectFilter(
       'query/'.$saved_query->getQueryKey(),
       'query/advanced');
 
     $form = id(new AphrontFormView())
-      ->setNoShading(true)
       ->setUser($user);
 
     $engine->buildSearchForm($form, $saved_query);
 
     $errors = $engine->getErrors();
     if ($errors) {
       $run_query = false;
       $errors = id(new AphrontErrorView())
         ->setTitle(pht('Query Errors'))
         ->setErrors($errors);
     }
 
     $submit = id(new AphrontFormSubmitControl())
       ->setValue(pht('Execute Query'));
 
     if ($run_query && !$named_query && $user->isLoggedIn()) {
       $submit->addCancelButton(
         '/search/edit/'.$saved_query->getQueryKey().'/',
         pht('Save Custom Query...'));
     }
 
     $form->appendChild($submit);
     $filter_view = id(new AphrontListFilterView())->appendChild($form);
 
     if ($run_query && $named_query) {
       if ($named_query->getIsBuiltin()) {
         $description = pht(
           'Showing results for query "%s".',
           $named_query->getQueryName());
       } else {
         $description = pht(
           'Showing results for saved query "%s".',
           $named_query->getQueryName());
       }
 
       $filter_view->setCollapsed(
         pht('Edit Query...'),
         pht('Hide Query'),
         $description,
         $this->getApplicationURI('query/advanced/?query='.$query_key));
     }
 
     if ($this->getPreface()) {
       $nav->appendChild($this->getPreface());
     }
 
     $nav->appendChild($filter_view);
 
     if ($run_query) {
       $query = $engine->buildQueryFromSavedQuery($saved_query);
 
       $pager = new AphrontCursorPagerView();
       $pager->readFromRequest($request);
       $pager->setPageSize($engine->getPageSize($saved_query));
       $objects = $query->setViewer($request->getUser())
         ->executeWithCursorPager($pager);
 
       $list = $parent->renderResultsList($objects, $saved_query);
 
       $nav->appendChild($list);
 
       // TODO: This is a bit hacky.
       if ($list instanceof PhabricatorObjectItemListView) {
         $list->setNoDataString(pht("No results found for this query."));
         $list->setPager($pager);
       } else {
         $nav->appendChild($pager);
       }
     }
 
     if ($errors) {
       $nav->appendChild($errors);
     }
 
     if ($named_query) {
       $title = pht('Query: %s', $named_query->getQueryName());
     } else {
       $title = pht('Advanced Search');
     }
 
     $crumbs = $parent
       ->buildApplicationCrumbs()
       ->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht("Search")));
 
     $nav->setCrumbs($crumbs);
 
     return $this->buildApplicationPage(
       $nav,
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 
   private function processEditRequest() {
     $parent = $this->getDelegatingController();
     $request = $this->getRequest();
     $user = $request->getUser();
     $engine = $this->getSearchEngine();
     $nav = $this->getNavigation();
 
     $named_queries = $engine->loadAllNamedQueries();
 
     $list_id = celerity_generate_unique_node_id();
 
     $list = new PhabricatorObjectItemListView();
     $list->setUser($user);
     $list->setID($list_id);
 
     Javelin::initBehavior(
       'search-reorder-queries',
       array(
         'listID' => $list_id,
         'orderURI' => '/search/order/'.get_class($engine).'/',
       ));
 
     foreach ($named_queries as $named_query) {
       $class = get_class($engine);
       $key = $named_query->getQueryKey();
 
       $item = id(new PhabricatorObjectItemView())
         ->setHeader($named_query->getQueryName())
         ->setHref($engine->getQueryResultsPageURI($key));
 
       if ($named_query->getIsBuiltin() && $named_query->getIsDisabled()) {
         $icon = 'new';
       } else {
         $icon = 'delete';
       }
 
       $item->addAction(
         id(new PHUIListItemView())
           ->setIcon($icon)
           ->setHref('/search/delete/'.$key.'/'.$class.'/')
           ->setWorkflow(true));
 
       if ($named_query->getIsBuiltin()) {
         if ($named_query->getIsDisabled()) {
           $item->addIcon('delete-grey', pht('Disabled'));
           $item->setDisabled(true);
         } else {
           $item->addIcon('lock-grey', pht('Builtin'));
         }
       } else {
         $item->addAction(
           id(new PHUIListItemView())
             ->setIcon('edit')
             ->setHref('/search/edit/'.$key.'/'));
       }
 
       $item->setGrippable(true);
       $item->addSigil('named-query');
       $item->setMetadata(
         array(
           'queryKey' => $named_query->getQueryKey(),
         ));
 
       $list->addItem($item);
     }
 
     $list->setNoDataString(pht('No saved queries.'));
 
     $crumbs = $parent
       ->buildApplicationCrumbs()
       ->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht("Saved Queries"))
           ->setHref($engine->getQueryManagementURI()));
 
     $nav->selectFilter('query/edit');
     $nav->setCrumbs($crumbs);
     $nav->appendChild($list);
 
     return $parent->buildApplicationPage(
       $nav,
       array(
         'title' => pht("Saved Queries"),
         'device' => true,
       ));
   }
 
   private function saveQuery(PhabricatorSavedQuery $query) {
     $query->setEngineClassName(get_class($this->getSearchEngine()));
 
     $unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
     try {
       $query->save();
     } catch (AphrontQueryDuplicateKeyException $ex) {
       // Ignore, this is just a repeated search.
     }
     unset($unguarded);
   }
 
   protected function buildApplicationMenu() {
     return $this->getDelegatingController()->buildApplicationMenu();
   }
 
 }
diff --git a/src/applications/search/controller/PhabricatorSearchController.php b/src/applications/search/controller/PhabricatorSearchController.php
index 62b7eca83..b98d1fd79 100644
--- a/src/applications/search/controller/PhabricatorSearchController.php
+++ b/src/applications/search/controller/PhabricatorSearchController.php
@@ -1,287 +1,286 @@
 <?php
 
 /**
  * @group search
  */
 final class PhabricatorSearchController
   extends PhabricatorSearchBaseController {
 
   private $key;
 
   public function willProcessRequest(array $data) {
     $this->key = idx($data, 'key');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     if ($this->key) {
       $query = id(new PhabricatorSearchQuery())->loadOneWhere(
         'queryKey = %s',
         $this->key);
       if (!$query) {
         return new Aphront404Response();
       }
     } else {
       $query = new PhabricatorSearchQuery();
 
       if ($request->isFormPost()) {
         $query_str = $request->getStr('query');
 
         $pref_jump = PhabricatorUserPreferences::PREFERENCE_SEARCHBAR_JUMP;
         if ($request->getStr('jump') != 'no' &&
             $user && $user->loadPreferences()->getPreference($pref_jump, 1)) {
           $response = PhabricatorJumpNavHandler::jumpPostResponse($query_str);
         } else {
           $response = null;
         }
         if ($response) {
           return $response;
         } else {
           $query->setQuery($query_str);
 
           if ($request->getStr('scope')) {
             switch ($request->getStr('scope')) {
               case PhabricatorSearchScope::SCOPE_OPEN_REVISIONS:
                 $query->setParameter('open', 1);
                 $query->setParameter(
                   'type',
                   DifferentialPHIDTypeRevision::TYPECONST);
                 break;
               case PhabricatorSearchScope::SCOPE_OPEN_TASKS:
                 $query->setParameter('open', 1);
                 $query->setParameter(
                   'type',
                   ManiphestPHIDTypeTask::TYPECONST);
                 break;
               case PhabricatorSearchScope::SCOPE_WIKI:
                 $query->setParameter(
                   'type',
                   PhrictionPHIDTypeDocument::TYPECONST);
                 break;
               case PhabricatorSearchScope::SCOPE_COMMITS:
                 $query->setParameter(
                   'type',
                   PhabricatorRepositoryPHIDTypeCommit::TYPECONST);
                 break;
               default:
                 break;
             }
           } else {
             if (strlen($request->getStr('type'))) {
               $query->setParameter('type', $request->getStr('type'));
             }
 
             if ($request->getArr('author')) {
               $query->setParameter('author', $request->getArr('author'));
             }
 
             if ($request->getArr('owner')) {
               $query->setParameter('owner', $request->getArr('owner'));
             }
 
             if ($request->getArr('subscribers')) {
               $query->setParameter('subscribers',
                                    $request->getArr('subscribers'));
             }
 
             if ($request->getInt('open')) {
               $query->setParameter('open', $request->getInt('open'));
             }
 
             if ($request->getArr('project')) {
               $query->setParameter('project', $request->getArr('project'));
             }
           }
 
           $query->save();
           return id(new AphrontRedirectResponse())
             ->setURI('/search/'.$query->getQueryKey().'/');
         }
       }
     }
 
     $options = array(
       '' => 'All Documents',
     ) + PhabricatorSearchAbstractDocument::getSupportedTypes();
 
     $status_options = array(
       0 => 'Open and Closed Documents',
       1 => 'Open Documents',
     );
 
     $phids = array_merge(
       $query->getParameter('author', array()),
       $query->getParameter('owner', array()),
       $query->getParameter('subscribers', array()),
       $query->getParameter('project', array()));
 
     $handles = $this->loadViewerHandles($phids);
 
     $author_value = array_select_keys(
       $handles,
       $query->getParameter('author', array()));
     $author_value = mpull($author_value, 'getFullName', 'getPHID');
 
     $owner_value = array_select_keys(
       $handles,
       $query->getParameter('owner', array()));
     $owner_value = mpull($owner_value, 'getFullName', 'getPHID');
 
     $subscribers_value = array_select_keys(
       $handles,
       $query->getParameter('subscribers', array()));
     $subscribers_value = mpull($subscribers_value, 'getFullName', 'getPHID');
 
     $project_value = array_select_keys(
       $handles,
       $query->getParameter('project', array()));
     $project_value = mpull($project_value, 'getFullName', 'getPHID');
 
     $search_form = new AphrontFormView();
     $search_form
       ->setUser($user)
       ->setAction('/search/')
-      ->setNoShading(true)
       ->appendChild(
         phutil_tag(
           'input',
           array(
             'type' => 'hidden',
             'name' => 'jump',
             'value' => 'no',
           )))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel('Search')
           ->setName('query')
           ->setValue($query->getQuery()))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel('Document Type')
           ->setName('type')
           ->setOptions($options)
           ->setValue($query->getParameter('type')))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel('Document Status')
           ->setName('open')
           ->setOptions($status_options)
           ->setValue($query->getParameter('open')))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setName('author')
           ->setLabel('Author')
           ->setDatasource('/typeahead/common/users/')
           ->setValue($author_value))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setName('owner')
           ->setLabel('Owner')
           ->setDatasource('/typeahead/common/searchowner/')
           ->setValue($owner_value)
           ->setCaption(
             'Tip: search for "Up For Grabs" to find unowned documents.'))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setName('subscribers')
           ->setLabel('Subscribers')
           ->setDatasource('/typeahead/common/users/')
           ->setValue($subscribers_value))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setName('project')
           ->setLabel('Project')
           ->setDatasource('/typeahead/common/projects/')
           ->setValue($project_value))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue('Search'));
 
     $search_panel = new AphrontListFilterView();
     $search_panel->appendChild($search_form);
 
     require_celerity_resource('phabricator-search-results-css');
 
     if ($query->getID()) {
 
       $limit = 20;
 
       $pager = new AphrontPagerView();
       $pager->setURI($request->getRequestURI(), 'page');
       $pager->setPageSize($limit);
       $pager->setOffset($request->getInt('page'));
 
       $query->setParameter('limit', $limit + 1);
       $query->setParameter('offset', $pager->getOffset());
 
       $engine = PhabricatorSearchEngineSelector::newSelector()->newEngine();
       $results = $engine->executeSearch($query);
       $results = $pager->sliceResults($results);
 
       // If there are any objects which match the query by name, and we're
       // not paging through the results, prefix the results with the named
       // objects.
       if (!$request->getInt('page')) {
         $named = id(new PhabricatorObjectQuery())
           ->setViewer($user)
           ->withNames(array($query->getQuery()))
           ->execute();
         if ($named) {
           $results = array_merge(array_keys($named), $results);
         }
       }
 
       if ($results) {
 
         $loader = id(new PhabricatorObjectHandleData($results))
           ->setViewer($user);
         $handles = $loader->loadHandles();
         $objects = $loader->loadObjects();
         $results = array();
         foreach ($handles as $phid => $handle) {
           $view = id(new PhabricatorSearchResultView())
             ->setHandle($handle)
             ->setQuery($query)
             ->setObject(idx($objects, $phid));
           $results[] = $view->render();
         }
 
         $results = hsprintf(
           '<div class="phabricator-search-result-list">'.
             '%s'.
             '<div class="search-results-pager">%s</div>'.
           '</div>',
           phutil_implode_html("\n", $results),
           $pager->render());
       } else {
         $results = hsprintf(
           '<div class="phabricator-search-result-list">'.
             '<p class="phabricator-search-no-results">No search results.</p>'.
           '</div>');
       }
       $results = id(new PHUIBoxView())
         ->addMargin(PHUI::MARGIN_LARGE)
         ->addPadding(PHUI::PADDING_LARGE)
         ->setShadow(true)
         ->appendChild($results)
         ->addClass('phabricator-search-result-box');
     } else {
       $results = null;
     }
 
 
     return $this->buildApplicationPage(
       array(
         $search_panel,
         $results,
       ),
       array(
         'title' => pht('Search Results'),
         'device' => true,
       ));
   }
 
 
 }
diff --git a/src/applications/search/controller/PhabricatorSearchEditController.php b/src/applications/search/controller/PhabricatorSearchEditController.php
index 920a9ec33..bf9bec53f 100644
--- a/src/applications/search/controller/PhabricatorSearchEditController.php
+++ b/src/applications/search/controller/PhabricatorSearchEditController.php
@@ -1,113 +1,117 @@
 <?php
 
 /**
  * @group search
  */
 final class PhabricatorSearchEditController
   extends PhabricatorSearchBaseController {
 
   private $queryKey;
 
   public function willProcessRequest(array $data) {
     $this->queryKey = idx($data, 'queryKey');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $saved_query = id(new PhabricatorSavedQueryQuery())
       ->setViewer($user)
       ->withQueryKeys(array($this->queryKey))
       ->executeOne();
 
     if (!$saved_query) {
       return new Aphront404Response();
     }
 
     $engine = $saved_query->newEngine()->setViewer($user);
 
     $complete_uri = $engine->getQueryManagementURI();
     $cancel_uri = $complete_uri;
 
     $named_query = id(new PhabricatorNamedQueryQuery())
       ->setViewer($user)
       ->withQueryKeys(array($saved_query->getQueryKey()))
       ->withUserPHIDs(array($user->getPHID()))
       ->executeOne();
     if (!$named_query) {
       $named_query = id(new PhabricatorNamedQuery())
         ->setUserPHID($user->getPHID())
         ->setQueryKey($saved_query->getQueryKey())
         ->setEngineClassName($saved_query->getEngineClassName());
 
       // If we haven't saved the query yet, this is a "Save..." operation, so
       // take the user back to the query if they cancel instead of back to the
       // management interface.
       $cancel_uri = $engine->getQueryResultsPageURI(
         $saved_query->getQueryKey());
     }
 
     $e_name = true;
     $errors = array();
 
     if ($request->isFormPost()) {
       $named_query->setQueryName($request->getStr('name'));
       if (!strlen($named_query->getQueryName())) {
         $e_name = pht('Required');
         $errors[] = pht('You must name the query.');
       } else {
         $e_name = null;
       }
 
       if (!$errors) {
         $named_query->save();
         return id(new AphrontRedirectResponse())->setURI($complete_uri);
       }
     }
 
     if ($errors) {
       $errors = id(new AphrontErrorView())
         ->setErrors($errors);
     }
 
     $form = id(new AphrontFormView())
       ->setUser($user);
 
     $form->appendChild(
       id(new AphrontFormTextControl())
         ->setName('name')
         ->setLabel(pht('Query Name'))
         ->setValue($named_query->getQueryName())
         ->setError($e_name));
 
     $form->appendChild(
       id(new AphrontFormSubmitControl())
         ->setValue(pht('Save Query'))
         ->addCancelButton($cancel_uri));
 
     if ($named_query->getID()) {
       $title = pht('Edit Saved Query');
     } else {
       $title = pht('Save Query');
     }
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($title)
+      ->setFormError($errors)
+      ->setForm($form);
+
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($title));
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $errors,
-        $form,
+        $form_box,
       ),
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 
 
 }
diff --git a/src/applications/settings/panel/PhabricatorSettingsPanelAccount.php b/src/applications/settings/panel/PhabricatorSettingsPanelAccount.php
index 94a56887b..d5adc5e48 100644
--- a/src/applications/settings/panel/PhabricatorSettingsPanelAccount.php
+++ b/src/applications/settings/panel/PhabricatorSettingsPanelAccount.php
@@ -1,123 +1,122 @@
 <?php
 
 final class PhabricatorSettingsPanelAccount
   extends PhabricatorSettingsPanel {
 
   public function getPanelKey() {
     return 'account';
   }
 
   public function getPanelName() {
     return pht('Account');
   }
 
   public function getPanelGroup() {
     return pht('Account Information');
   }
 
   public function processRequest(AphrontRequest $request) {
     $user = $request->getUser();
     $errors = array();
     if ($request->isFormPost()) {
       $new_timezone = $request->getStr('timezone');
       if (in_array($new_timezone, DateTimeZone::listIdentifiers(), true)) {
         $user->setTimezoneIdentifier($new_timezone);
       } else {
         $errors[] = pht('The selected timezone is not a valid timezone.');
       }
 
       $sex = $request->getStr('sex');
       $sexes = array(PhutilPerson::SEX_MALE, PhutilPerson::SEX_FEMALE);
       if (in_array($sex, $sexes)) {
         $user->setSex($sex);
       } else {
         $user->setSex(null);
       }
 
       // Checked in runtime.
       $user->setTranslation($request->getStr('translation'));
 
       if (!$errors) {
         $user->save();
         return id(new AphrontRedirectResponse())
           ->setURI($this->getPanelURI('?saved=true'));
       }
     }
 
     $notice = null;
     if (!$errors) {
       if ($request->getStr('saved')) {
         $notice = new AphrontErrorView();
         $notice->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
         $notice->setTitle(pht('Changes Saved'));
         $notice->appendChild(
           phutil_tag('p', array(), pht('Your changes have been saved.')));
         $notice = $notice->render();
       }
     } else {
       $notice = new AphrontErrorView();
       $notice->setErrors($errors);
     }
 
     $timezone_ids = DateTimeZone::listIdentifiers();
     $timezone_id_map = array_fuse($timezone_ids);
 
     $sexes = array(
       PhutilPerson::SEX_UNKNOWN => pht('Unspecified'),
       PhutilPerson::SEX_MALE => pht('Male'),
       PhutilPerson::SEX_FEMALE => pht('Female'),
     );
 
     $translations = array();
     $symbols = id(new PhutilSymbolLoader())
       ->setType('class')
       ->setAncestorClass('PhabricatorTranslation')
       ->setConcreteOnly(true)
       ->selectAndLoadSymbols();
     foreach ($symbols as $symbol) {
       $class = $symbol['name'];
       $translations[$class] = newv($class, array())->getName();
     }
     asort($translations);
     $default = PhabricatorEnv::newObjectFromConfig('translation.provider');
     $translations = array(
       '' => pht('Server Default (%s)', $default->getName()),
     ) + $translations;
 
 
     $form = new AphrontFormView();
     $form
       ->setUser($user)
-      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Timezone'))
           ->setName('timezone')
           ->setOptions($timezone_id_map)
           ->setValue($user->getTimezoneIdentifier()))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setOptions($sexes)
           ->setLabel(pht('Sex'))
           ->setName('sex')
           ->setValue($user->getSex()))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setOptions($translations)
           ->setLabel(pht('Translation'))
           ->setName('translation')
           ->setValue($user->getTranslation()))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Save Account Settings')));
 
-    $header = new PhabricatorHeaderView();
-    $header->setHeader(pht('Account Settings'));
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Account Settings'))
+      ->setForm($form);
 
     return array(
       $notice,
-      $header,
-      $form,
+      $form_box,
     );
   }
 }
diff --git a/src/applications/settings/panel/PhabricatorSettingsPanelConduit.php b/src/applications/settings/panel/PhabricatorSettingsPanelConduit.php
index a4851f2c4..ced2a8ba1 100644
--- a/src/applications/settings/panel/PhabricatorSettingsPanelConduit.php
+++ b/src/applications/settings/panel/PhabricatorSettingsPanelConduit.php
@@ -1,109 +1,109 @@
 <?php
 
 final class PhabricatorSettingsPanelConduit
   extends PhabricatorSettingsPanel {
 
   public function getPanelKey() {
     return 'conduit';
   }
 
   public function getPanelName() {
     return pht('Conduit');
   }
 
   public function getPanelGroup() {
     return pht('Authentication');
   }
 
   public function processRequest(AphrontRequest $request) {
     $user = $request->getUser();
 
     if ($request->isFormPost()) {
       if (!$request->isDialogFormPost()) {
         $dialog = new AphrontDialogView();
         $dialog->setUser($user);
         $dialog->setTitle(pht('Really regenerate session?'));
         $dialog->setSubmitURI($this->getPanelURI());
         $dialog->addSubmitButton(pht('Regenerate'));
         $dialog->addCancelbutton($this->getPanelURI());
         $dialog->appendChild(phutil_tag('p', array(), pht(
           'Really destroy the old certificate? Any established '.
           'sessions will be terminated.')));
 
         return id(new AphrontDialogResponse())
           ->setDialog($dialog);
       }
 
       $conn = $user->establishConnection('w');
       queryfx(
         $conn,
         'DELETE FROM %T WHERE userPHID = %s AND type LIKE %>',
         PhabricatorUser::SESSION_TABLE,
         $user->getPHID(),
         'conduit');
 
       // This implicitly regenerates the certificate.
       $user->setConduitCertificate(null);
       $user->save();
       return id(new AphrontRedirectResponse())
         ->setURI($this->getPanelURI('?regenerated=true'));
     }
 
     if ($request->getStr('regenerated')) {
       $notice = new AphrontErrorView();
       $notice->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
       $notice->setTitle(pht('Certificate Regenerated'));
       $notice->appendChild(phutil_tag(
         'p',
         array(),
         pht('Your old certificate has been destroyed and you have been issued '.
         'a new certificate. Sessions established under the old certificate '.
         'are no longer valid.')));
       $notice = $notice->render();
     } else {
       $notice = null;
     }
 
     $cert_form = new AphrontFormView();
     $cert_form
       ->setUser($user)
       ->appendChild(hsprintf(
         '<p class="aphront-form-instructions">%s</p>',
         pht('This certificate allows you to authenticate over Conduit, '.
           'the Phabricator API. Normally, you just run %s to install it.',
           hsprintf('<tt>%s</tt>', 'arc install-certificate'))))
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setLabel(pht('Certificate'))
           ->setHeight(AphrontFormTextAreaControl::HEIGHT_SHORT)
           ->setValue($user->getConduitCertificate()));
 
-    $header1 = new PhabricatorHeaderView();
-    $header1->setHeader(pht('Arcanist Certificate'));
+    $cert_form = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Arcanist Certificate'))
+      ->setForm($cert_form);
 
     $regen_instruction = pht('You can regenerate this certificate, which '.
       'will invalidate the old certificate and create a new one.');
 
     $regen_form = new AphrontFormView();
     $regen_form
       ->setUser($user)
       ->setAction($this->getPanelURI())
       ->setWorkflow(true)
       ->appendChild(hsprintf(
         '<p class="aphront-form-instructions">%s</p>', $regen_instruction))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Regenerate Certificate')));
 
-    $header = new PhabricatorHeaderView();
-    $header->setHeader(pht('Regenerate Certificate'));
+    $regen_form = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Regenerate Certificate'))
+      ->setForm($regen_form);
 
     return array(
       $notice,
-      $header1,
       $cert_form,
-      $header,
       $regen_form,
     );
   }
 }
diff --git a/src/applications/settings/panel/PhabricatorSettingsPanelConpherencePreferences.php b/src/applications/settings/panel/PhabricatorSettingsPanelConpherencePreferences.php
index dd44bc0b8..35e4fd1fc 100644
--- a/src/applications/settings/panel/PhabricatorSettingsPanelConpherencePreferences.php
+++ b/src/applications/settings/panel/PhabricatorSettingsPanelConpherencePreferences.php
@@ -1,77 +1,77 @@
 <?php
 
 final class PhabricatorSettingsPanelConpherencePreferences
   extends PhabricatorSettingsPanel {
 
   public function isEnabled() {
     return PhabricatorApplication::isClassInstalled(
       'PhabricatorApplicationConpherence');
   }
 
   public function getPanelKey() {
     return 'conpherence';
   }
 
   public function getPanelName() {
     return pht('Conpherence Preferences');
   }
 
   public function getPanelGroup() {
     return pht('Application Settings');
   }
 
   public function processRequest(AphrontRequest $request) {
     $user = $request->getUser();
     $preferences = $user->loadPreferences();
 
     $pref = PhabricatorUserPreferences::PREFERENCE_CONPH_NOTIFICATIONS;
 
     if ($request->isFormPost()) {
       $notifications = $request->getInt($pref);
       $preferences->setPreference($pref, $notifications);
       $preferences->save();
       return id(new AphrontRedirectResponse())
         ->setURI($this->getPanelURI('?saved=true'));
     }
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Conpherence Notifications'))
           ->setName($pref)
           ->setValue($preferences->getPreference($pref))
           ->setOptions(
             array(
               ConpherenceSettings::EMAIL_ALWAYS
                 => pht('Email Always'),
               ConpherenceSettings::NOTIFICATIONS_ONLY
                 => pht('Notifications Only'),
             ))
           ->setCaption(
             pht('Should Conpherence send emails for updates or '.
                 'notifications only? This global setting can be overridden '.
                 'on a per-thread basis within Conpherence.')))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Save Preferences')));
 
-    $header = new PhabricatorHeaderView();
-    $header->setHeader(pht('Conpherence Preferences'));
-
     $error_view = null;
     if ($request->getBool('saved')) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Preferences Saved'))
         ->setSeverity(AphrontErrorView::SEVERITY_NOTICE)
         ->setErrors(array(pht('Your preferences have been saved.')));
     }
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Conpherence Preferences'))
+      ->setFormError($error_view)
+      ->setForm($form);
+
     return array(
-      $error_view,
-      $header,
-      $form,
+      $form_box,
     );
   }
 }
 
diff --git a/src/applications/settings/panel/PhabricatorSettingsPanelDeveloperPreferences.php b/src/applications/settings/panel/PhabricatorSettingsPanelDeveloperPreferences.php
index e9cefcc8d..f07a7459c 100644
--- a/src/applications/settings/panel/PhabricatorSettingsPanelDeveloperPreferences.php
+++ b/src/applications/settings/panel/PhabricatorSettingsPanelDeveloperPreferences.php
@@ -1,107 +1,106 @@
 <?php
 
 final class PhabricatorSettingsPanelDeveloperPreferences
   extends PhabricatorSettingsPanel {
 
   public function getPanelKey() {
     return 'developer';
   }
 
   public function getPanelName() {
     return pht('Developer Settings');
   }
 
   public function getPanelGroup() {
     return pht('Developer');
   }
 
   public function processRequest(AphrontRequest $request) {
     $user = $request->getUser();
     $preferences = $user->loadPreferences();
 
     $pref_dark_console = PhabricatorUserPreferences::PREFERENCE_DARK_CONSOLE;
 
     $dark_console_value = $preferences->getPreference($pref_dark_console);
 
     if ($request->isFormPost()) {
       $new_dark_console = $request->getBool($pref_dark_console);
       $preferences->setPreference($pref_dark_console, $new_dark_console);
 
       // If the user turned Dark Console on, enable it (as though they had hit
       // "`").
       if ($new_dark_console && !$dark_console_value) {
         $user->setConsoleVisible(true);
         $user->save();
       }
 
       $preferences->save();
 
       return id(new AphrontRedirectResponse())
         ->setURI($this->getPanelURI('?saved=true'));
     }
 
     $is_console_enabled = PhabricatorEnv::getEnvConfig('darkconsole.enabled');
 
     $preamble = pht(
       '**DarkConsole** is a developer console which can help build and '.
       'debug Phabricator applications. It includes tools for understanding '.
       'errors, performance, service calls, and other low-level aspects of '.
       'Phabricator\'s inner workings.');
 
     if ($is_console_enabled) {
       $instructions = pht(
         "%s\n\n".
         'You can enable it for your account below. Enabling DarkConsole will '.
         'slightly decrease performance, but give you access to debugging '.
         'tools. You may want to disable it again later if you only need it '.
         'temporarily.'.
         "\n\n".
         'NOTE: After enabling DarkConsole, **press the ##`## key on your '.
         'keyboard** to show or hide it.',
         $preamble);
     } else {
       $instructions = pht(
         "%s\n\n".
         'Before you can turn on DarkConsole, it needs to be enabled in '.
         'the configuration for this install (`darkconsole.enabled`).',
         $preamble);
     }
 
     $form = id(new AphrontFormView())
       ->setUser($user)
-      ->setFlexible(true)
       ->appendRemarkupInstructions($instructions)
       ->appendChild(
         id(new AphrontFormSelectControl())
         ->setLabel(pht('Dark Console'))
         ->setName($pref_dark_console)
         ->setValue($dark_console_value)
         ->setOptions(
           array(
             0 => pht('Disable DarkConsole'),
             1 => pht('Enable DarkConsole'),
           ))
         ->setDisabled(!$is_console_enabled))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Save Preferences')));
 
-    $header = id(new PhabricatorHeaderView())
-      ->setHeader(pht('Developer Settings'));
-
     $error_view = null;
     if ($request->getBool('saved')) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Preferences Saved'))
         ->setSeverity(AphrontErrorView::SEVERITY_NOTICE)
         ->setErrors(array(pht('Your preferences have been saved.')));
     }
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Developer Settings'))
+      ->setFormError($error_view)
+      ->setForm($form);
+
     return array(
-      $error_view,
-      $header,
-      $form,
+      $form_box,
     );
   }
 }
 
diff --git a/src/applications/settings/panel/PhabricatorSettingsPanelDiffPreferences.php b/src/applications/settings/panel/PhabricatorSettingsPanelDiffPreferences.php
index 4254e8e35..d5cb42e02 100644
--- a/src/applications/settings/panel/PhabricatorSettingsPanelDiffPreferences.php
+++ b/src/applications/settings/panel/PhabricatorSettingsPanelDiffPreferences.php
@@ -1,79 +1,79 @@
 <?php
 
 final class PhabricatorSettingsPanelDiffPreferences
   extends PhabricatorSettingsPanel {
 
   public function getPanelKey() {
     return 'diff';
   }
 
   public function getPanelName() {
     return pht('Diff Preferences');
   }
 
   public function getPanelGroup() {
     return pht('Application Settings');
   }
 
   public function processRequest(AphrontRequest $request) {
     $user = $request->getUser();
     $preferences = $user->loadPreferences();
 
     $pref_filetree = PhabricatorUserPreferences::PREFERENCE_DIFF_FILETREE;
 
     if ($request->isFormPost()) {
       $filetree = $request->getInt($pref_filetree);
 
       if ($filetree && !$preferences->getPreference($pref_filetree)) {
         $preferences->setPreference(
           PhabricatorUserPreferences::PREFERENCE_NAV_COLLAPSED,
           false);
       }
 
       $preferences->setPreference($pref_filetree, $filetree);
 
       $preferences->save();
       return id(new AphrontRedirectResponse())
         ->setURI($this->getPanelURI('?saved=true'));
     }
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Show Filetree'))
           ->setName($pref_filetree)
           ->setValue($preferences->getPreference($pref_filetree))
           ->setOptions(
             array(
               0 => pht('Disable Filetree'),
               1 => pht('Enable Filetree'),
             ))
           ->setCaption(
             pht("When looking at a revision or commit, enable a sidebar ".
                 "showing affected files. You can press %s to show or hide ".
                 "the sidebar.",
                 phutil_tag('tt', array(), 'f'))))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Save Preferences')));
 
-    $header = new PhabricatorHeaderView();
-    $header->setHeader(pht('Diff Preferences'));
-
     $error_view = null;
     if ($request->getBool('saved')) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Preferences Saved'))
         ->setSeverity(AphrontErrorView::SEVERITY_NOTICE)
         ->setErrors(array(pht('Your preferences have been saved.')));
     }
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Diff Preferences'))
+      ->setFormError($error_view)
+      ->setForm($form);
+
     return array(
-      $error_view,
-      $header,
-      $form,
+      $form_box,
     );
   }
 }
 
diff --git a/src/applications/settings/panel/PhabricatorSettingsPanelDisplayPreferences.php b/src/applications/settings/panel/PhabricatorSettingsPanelDisplayPreferences.php
index 1ae560e53..b356c6e7a 100644
--- a/src/applications/settings/panel/PhabricatorSettingsPanelDisplayPreferences.php
+++ b/src/applications/settings/panel/PhabricatorSettingsPanelDisplayPreferences.php
@@ -1,158 +1,158 @@
 <?php
 
 final class PhabricatorSettingsPanelDisplayPreferences
   extends PhabricatorSettingsPanel {
 
   public function getPanelKey() {
     return 'display';
   }
 
   public function getPanelName() {
     return pht('Display Preferences');
   }
 
   public function getPanelGroup() {
     return pht('Application Settings');
   }
 
   public function processRequest(AphrontRequest $request) {
     $user = $request->getUser();
     $preferences = $user->loadPreferences();
 
     $pref_monospaced   = PhabricatorUserPreferences::PREFERENCE_MONOSPACED;
     $pref_editor       = PhabricatorUserPreferences::PREFERENCE_EDITOR;
     $pref_multiedit    = PhabricatorUserPreferences::PREFERENCE_MULTIEDIT;
     $pref_titles       = PhabricatorUserPreferences::PREFERENCE_TITLES;
     $pref_monospaced_textareas =
       PhabricatorUserPreferences::PREFERENCE_MONOSPACED_TEXTAREAS;
 
     if ($request->isFormPost()) {
       $monospaced = $request->getStr($pref_monospaced);
 
       // Prevent the user from doing stupid things.
       $monospaced = preg_replace('/[^a-z0-9 ,"]+/i', '', $monospaced);
 
       $preferences->setPreference($pref_titles, $request->getStr($pref_titles));
       $preferences->setPreference($pref_editor, $request->getStr($pref_editor));
       $preferences->setPreference(
         $pref_multiedit,
         $request->getStr($pref_multiedit));
       $preferences->setPreference($pref_monospaced, $monospaced);
       $preferences->setPreference(
         $pref_monospaced_textareas,
         $request->getStr($pref_monospaced_textareas));
 
       $preferences->save();
       return id(new AphrontRedirectResponse())
         ->setURI($this->getPanelURI('?saved=true'));
     }
 
     $example_string = <<<EXAMPLE
 // This is what your monospaced font currently looks like.
 function helloWorld() {
   alert("Hello world!");
 }
 EXAMPLE;
 
     $editor_doc_link = phutil_tag(
       'a',
       array(
         'href' => PhabricatorEnv::getDoclink(
           'article/User_Guide_Configuring_an_External_Editor.html'),
       ),
       pht('User Guide: Configuring an External Editor'));
 
     $font_default = PhabricatorEnv::getEnvConfig('style.monospace');
 
     $pref_monospaced_textareas_value = $preferences
       ->getPreference($pref_monospaced_textareas);
     if (!$pref_monospaced_textareas_value) {
       $pref_monospaced_textareas_value = 'disabled';
     }
 
     $editor_instructions = pht('Link to edit files in external editor. '.
       '%%f is replaced by filename, %%l by line number, %%r by repository '.
       'callsign, %%%% by literal %%. For documentation, see: %s',
       hsprintf('%s', $editor_doc_link));
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Page Titles'))
           ->setName($pref_titles)
           ->setValue($preferences->getPreference($pref_titles))
           ->setOptions(
             array(
               'glyph' =>
               pht("In page titles, show Tool names as unicode glyphs: " .
                 "\xE2\x9A\x99"),
               'text' =>
               pht('In page titles, show Tool names as plain text: ' .
                 '[Differential]'),
             )))
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel(pht('Editor Link'))
         ->setName($pref_editor)
         // How to pht()
         ->setCaption($editor_instructions)
         ->setValue($preferences->getPreference($pref_editor)))
       ->appendChild(
         id(new AphrontFormSelectControl())
         ->setLabel(pht('Edit Multiple Files'))
         ->setName($pref_multiedit)
         ->setOptions(array(
           '' => pht('Supported (paths separated by spaces)'),
           'disable' => pht('Not Supported'),
         ))
         ->setValue($preferences->getPreference($pref_multiedit)))
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel(pht('Monospaced Font'))
         ->setName($pref_monospaced)
         // Check plz
         ->setCaption(hsprintf(
           '%s<br />(%s: %s)',
           pht('Overrides default fonts in tools like Differential.'),
           pht('Default'),
           $font_default))
         ->setValue($preferences->getPreference($pref_monospaced)))
       ->appendChild(
         id(new AphrontFormMarkupControl())
         ->setValue(phutil_tag(
           'pre',
           array('class' => 'PhabricatorMonospaced'),
           $example_string)))
       ->appendChild(
         id(new AphrontFormRadioButtonControl())
         ->setLabel(pht('Monospaced Textareas'))
         ->setName($pref_monospaced_textareas)
         ->setValue($pref_monospaced_textareas_value)
         ->addButton('enabled', pht('Enabled'),
           pht('Show all textareas using the monospaced font defined above.'))
         ->addButton('disabled', pht('Disabled'), null));
 
     $form->appendChild(
       id(new AphrontFormSubmitControl())
         ->setValue(pht('Save Preferences')));
 
-    $header = new PhabricatorHeaderView();
-    $header->setHeader(pht('Display Preferences'));
-
     $error_view = null;
     if ($request->getStr('saved') === 'true') {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Preferences Saved'))
         ->setSeverity(AphrontErrorView::SEVERITY_NOTICE)
         ->setErrors(array(pht('Your preferences have been saved.')));
     }
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Display Preferences'))
+      ->setFormError($error_view)
+      ->setForm($form);
+
     return array(
-      $error_view,
-      $header,
-      $form,
+      $form_box,
     );
   }
 }
 
diff --git a/src/applications/settings/panel/PhabricatorSettingsPanelEmailAddresses.php b/src/applications/settings/panel/PhabricatorSettingsPanelEmailAddresses.php
index d3142fb99..02495e88b 100644
--- a/src/applications/settings/panel/PhabricatorSettingsPanelEmailAddresses.php
+++ b/src/applications/settings/panel/PhabricatorSettingsPanelEmailAddresses.php
@@ -1,355 +1,355 @@
 <?php
 
 final class PhabricatorSettingsPanelEmailAddresses
   extends PhabricatorSettingsPanel {
 
   public function getPanelKey() {
     return 'email';
   }
 
   public function getPanelName() {
     return pht('Email Addresses');
   }
 
   public function getPanelGroup() {
     return pht('Email');
   }
 
   public function processRequest(AphrontRequest $request) {
     $user = $request->getUser();
     $editable = PhabricatorEnv::getEnvConfig('account.editable');
 
     $uri = $request->getRequestURI();
     $uri->setQueryParams(array());
 
     if ($editable) {
       $new = $request->getStr('new');
       if ($new) {
         return $this->returnNewAddressResponse($request, $uri, $new);
       }
 
       $delete = $request->getInt('delete');
       if ($delete) {
         return $this->returnDeleteAddressResponse($request, $uri, $delete);
       }
     }
 
     $verify = $request->getInt('verify');
     if ($verify) {
       return $this->returnVerifyAddressResponse($request, $uri, $verify);
     }
 
     $primary = $request->getInt('primary');
     if ($primary) {
       return $this->returnPrimaryAddressResponse($request, $uri, $primary);
     }
 
     $emails = id(new PhabricatorUserEmail())->loadAllWhere(
       'userPHID = %s ORDER BY address',
       $user->getPHID());
 
     $rowc = array();
     $rows = array();
     foreach ($emails as $email) {
 
       $button_verify = javelin_tag(
         'a',
         array(
           'class' => 'button small grey',
           'href'  => $uri->alter('verify', $email->getID()),
           'sigil' => 'workflow',
         ),
         pht('Verify'));
 
       $button_make_primary = javelin_tag(
         'a',
         array(
           'class' => 'button small grey',
           'href'  => $uri->alter('primary', $email->getID()),
           'sigil' => 'workflow',
         ),
         pht('Make Primary'));
 
       $button_remove = javelin_tag(
         'a',
         array(
           'class'   => 'button small grey',
           'href'    => $uri->alter('delete', $email->getID()),
           'sigil'   => 'workflow'
         ),
         pht('Remove'));
 
       $button_primary = phutil_tag(
         'a',
         array(
           'class' => 'button small disabled',
         ),
         pht('Primary'));
 
       if (!$email->getIsVerified()) {
         $action = $button_verify;
       } else if ($email->getIsPrimary()) {
         $action = $button_primary;
       } else {
         $action = $button_make_primary;
       }
 
       if ($email->getIsPrimary()) {
         $remove = $button_primary;
         $rowc[] = 'highlighted';
       } else {
         $remove = $button_remove;
         $rowc[] = null;
       }
 
       $rows[] = array(
         $email->getAddress(),
         $action,
         $remove,
       );
     }
 
     $table = new AphrontTableView($rows);
     $table->setHeaders(
       array(
         pht('Email'),
         pht('Status'),
         pht('Remove'),
       ));
     $table->setColumnClasses(
       array(
         'wide',
         'action',
         'action',
       ));
     $table->setRowClasses($rowc);
     $table->setColumnVisibility(
       array(
         true,
         true,
         $editable,
       ));
 
     $view = new AphrontPanelView();
     if ($editable) {
       $view->addButton(
         javelin_tag(
           'a',
           array(
             'href'      => $uri->alter('new', 'true'),
             'class'     => 'green button',
             'sigil'     => 'workflow',
           ),
           pht('Add New Address')));
     }
     $view->setHeader(pht('Email Addresses'));
     $view->appendChild($table);
     $view->setNoBackground();
 
     return $view;
   }
 
   private function returnNewAddressResponse(
     AphrontRequest $request,
     PhutilURI $uri,
     $new) {
 
     $user = $request->getUser();
 
     $e_email = true;
     $email   = trim($request->getStr('email'));
     $errors  = array();
     if ($request->isDialogFormPost()) {
 
       if ($new == 'verify') {
         // The user clicked "Done" from the "an email has been sent" dialog.
         return id(new AphrontReloadResponse())->setURI($uri);
       }
 
       if (!strlen($email)) {
         $e_email = pht('Required');
         $errors[] = pht('Email is required.');
       } else if (!PhabricatorUserEmail::isAllowedAddress($email)) {
         $e_email = pht('Invalid');
         $errors[] = PhabricatorUserEmail::describeAllowedAddresses();
       }
 
       if (!$errors) {
         $object = id(new PhabricatorUserEmail())
           ->setAddress($email)
           ->setIsVerified(0);
 
         try {
 
           id(new PhabricatorUserEditor())
             ->setActor($user)
             ->addEmail($user, $object);
 
           $object->sendVerificationEmail($user);
 
           $dialog = id(new AphrontDialogView())
             ->setUser($user)
             ->addHiddenInput('new',  'verify')
             ->setTitle(pht('Verification Email Sent'))
             ->appendChild(phutil_tag('p', array(), pht(
               'A verification email has been sent. Click the link in the '.
               'email to verify your address.')))
             ->setSubmitURI($uri)
             ->addSubmitButton(pht('Done'));
 
           return id(new AphrontDialogResponse())->setDialog($dialog);
         } catch (AphrontQueryDuplicateKeyException $ex) {
           $email = pht('Duplicate');
           $errors[] = pht('Another user already has this email.');
         }
       }
     }
 
     if ($errors) {
       $errors = id(new AphrontErrorView())
         ->setErrors($errors);
     }
 
-    $form = id(new AphrontFormLayoutView())
+    $form = id(new PHUIFormLayoutView())
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Email'))
           ->setName('email')
           ->setValue($request->getStr('email'))
           ->setCaption(PhabricatorUserEmail::describeAllowedAddresses())
           ->setError($e_email));
 
     $dialog = id(new AphrontDialogView())
       ->setUser($user)
       ->addHiddenInput('new', 'true')
       ->setTitle(pht('New Address'))
       ->appendChild($errors)
       ->appendChild($form)
       ->addSubmitButton(pht('Save'))
       ->addCancelButton($uri);
 
     return id(new AphrontDialogResponse())->setDialog($dialog);
   }
 
   private function returnDeleteAddressResponse(
     AphrontRequest $request,
     PhutilURI $uri,
     $email_id) {
 
     $user = $request->getUser();
 
     // NOTE: You can only delete your own email addresses, and you can not
     // delete your primary address.
     $email = id(new PhabricatorUserEmail())->loadOneWhere(
       'id = %d AND userPHID = %s AND isPrimary = 0',
       $email_id,
       $user->getPHID());
 
     if (!$email) {
       return new Aphront404Response();
     }
 
     if ($request->isFormPost()) {
 
       id(new PhabricatorUserEditor())
         ->setActor($user)
         ->removeEmail($user, $email);
 
       return id(new AphrontRedirectResponse())->setURI($uri);
     }
 
     $address = $email->getAddress();
 
     $dialog = id(new AphrontDialogView())
       ->setUser($user)
       ->addHiddenInput('delete', $email_id)
       ->setTitle(pht("Really delete address '%s'?", $address))
       ->appendChild(phutil_tag('p', array(), pht(
         'Are you sure you want to delete this address? You will no '.
         'longer be able to use it to login.')))
       ->addSubmitButton(pht('Delete'))
       ->addCancelButton($uri);
 
     return id(new AphrontDialogResponse())->setDialog($dialog);
   }
 
   private function returnVerifyAddressResponse(
     AphrontRequest $request,
     PhutilURI $uri,
     $email_id) {
 
     $user = $request->getUser();
 
     // NOTE: You can only send more email for your unverified addresses.
     $email = id(new PhabricatorUserEmail())->loadOneWhere(
       'id = %d AND userPHID = %s AND isVerified = 0',
       $email_id,
       $user->getPHID());
 
     if (!$email) {
       return new Aphront404Response();
     }
 
     if ($request->isFormPost()) {
       $email->sendVerificationEmail($user);
       return id(new AphrontRedirectResponse())->setURI($uri);
     }
 
     $address = $email->getAddress();
 
     $dialog = id(new AphrontDialogView())
       ->setUser($user)
       ->addHiddenInput('verify', $email_id)
       ->setTitle(pht("Send Another Verification Email?"))
       ->appendChild(hsprintf(
         '<p>%s</p>',
         pht('Send another copy of the verification email to %s?', $address)))
       ->addSubmitButton(pht('Send Email'))
       ->addCancelButton($uri);
 
     return id(new AphrontDialogResponse())->setDialog($dialog);
   }
 
   private function returnPrimaryAddressResponse(
     AphrontRequest $request,
     PhutilURI $uri,
     $email_id) {
 
     $user = $request->getUser();
 
     // NOTE: You can only make your own verified addresses primary.
     $email = id(new PhabricatorUserEmail())->loadOneWhere(
       'id = %d AND userPHID = %s AND isVerified = 1 AND isPrimary = 0',
       $email_id,
       $user->getPHID());
 
     if (!$email) {
       return new Aphront404Response();
     }
 
     if ($request->isFormPost()) {
 
       id(new PhabricatorUserEditor())
         ->setActor($user)
         ->changePrimaryEmail($user, $email);
 
       return id(new AphrontRedirectResponse())->setURI($uri);
     }
 
     $address = $email->getAddress();
 
     $dialog = id(new AphrontDialogView())
       ->setUser($user)
       ->addHiddenInput('primary', $email_id)
       ->setTitle(pht("Change primary email address?"))
       ->appendChild(hsprintf(
         '<p>If you change your primary address, Phabricator will send'.
           ' all email to %s.</p>',
         $address))
       ->addSubmitButton(pht('Change Primary Address'))
       ->addCancelButton($uri);
 
     return id(new AphrontDialogResponse())->setDialog($dialog);
   }
 
 }
diff --git a/src/applications/settings/panel/PhabricatorSettingsPanelEmailPreferences.php b/src/applications/settings/panel/PhabricatorSettingsPanelEmailPreferences.php
index 3ce441dbd..0586d1fc6 100644
--- a/src/applications/settings/panel/PhabricatorSettingsPanelEmailPreferences.php
+++ b/src/applications/settings/panel/PhabricatorSettingsPanelEmailPreferences.php
@@ -1,309 +1,309 @@
 <?php
 
 final class PhabricatorSettingsPanelEmailPreferences
   extends PhabricatorSettingsPanel {
 
   public function getPanelKey() {
     return 'emailpreferences';
   }
 
   public function getPanelName() {
     return pht('Email Preferences');
   }
 
   public function getPanelGroup() {
     return pht('Email');
   }
 
   public function processRequest(AphrontRequest $request) {
     $user = $request->getUser();
 
     $preferences = $user->loadPreferences();
 
     $pref_re_prefix = PhabricatorUserPreferences::PREFERENCE_RE_PREFIX;
     $pref_vary = PhabricatorUserPreferences::PREFERENCE_VARY_SUBJECT;
     $pref_no_self_mail = PhabricatorUserPreferences::PREFERENCE_NO_SELF_MAIL;
 
     $errors = array();
     if ($request->isFormPost()) {
 
       if (PhabricatorMetaMTAMail::shouldMultiplexAllMail()) {
         if ($request->getStr($pref_re_prefix) == 'default') {
           $preferences->unsetPreference($pref_re_prefix);
         } else {
           $preferences->setPreference(
             $pref_re_prefix,
             $request->getBool($pref_re_prefix));
         }
 
         if ($request->getStr($pref_vary) == 'default') {
           $preferences->unsetPreference($pref_vary);
         } else {
           $preferences->setPreference(
             $pref_vary,
             $request->getBool($pref_vary));
         }
       }
 
       $preferences->setPreference(
         $pref_no_self_mail,
         $request->getStr($pref_no_self_mail));
 
       $new_tags = $request->getArr('mailtags');
       $mailtags = $preferences->getPreference('mailtags', array());
       $all_tags = $this->getMailTags();
 
       $maniphest = 'PhabricatorApplicationManiphest';
       if (!PhabricatorApplication::isClassInstalled($maniphest)) {
         $all_tags = array_diff_key($all_tags, $this->getManiphestMailTags());
       }
 
       foreach ($all_tags as $key => $label) {
         $mailtags[$key] = (bool)idx($new_tags, $key, false);
       }
       $preferences->setPreference('mailtags', $mailtags);
 
       $preferences->save();
 
       return id(new AphrontRedirectResponse())
         ->setURI($this->getPanelURI('?saved=true'));
     }
 
     $notice = null;
     if (!$errors) {
       if ($request->getStr('saved')) {
         $notice = new AphrontErrorView();
         $notice->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
         $notice->setTitle(pht('Changes Saved'));
         $notice->appendChild(
           phutil_tag('p', array(), pht('Your changes have been saved.')));
       }
     } else {
       $notice = new AphrontErrorView();
       $notice->setTitle(pht('Form Errors'));
       $notice->setErrors($errors);
     }
 
     $re_prefix_default = PhabricatorEnv::getEnvConfig('metamta.re-prefix')
       ? pht('Enabled')
       : pht('Disabled');
 
     $vary_default = PhabricatorEnv::getEnvConfig('metamta.vary-subjects')
       ? pht('Vary')
       : pht('Do Not Vary');
 
     $re_prefix_value = $preferences->getPreference($pref_re_prefix);
     if ($re_prefix_value === null) {
       $re_prefix_value = 'default';
     } else {
       $re_prefix_value = $re_prefix_value
         ? 'true'
         : 'false';
     }
 
     $vary_value = $preferences->getPreference($pref_vary);
     if ($vary_value === null) {
       $vary_value = 'default';
     } else {
       $vary_value = $vary_value
         ? 'true'
         : 'false';
     }
 
     $form = new AphrontFormView();
     $form
       ->setUser($user)
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Self Actions'))
           ->setName($pref_no_self_mail)
           ->setOptions(
             array(
               '0' => pht('Send me an email when I take an action'),
               '1' => pht('Do not send me an email when I take an action'),
             ))
           ->setCaption(pht('You can disable email about your own actions.'))
           ->setValue($preferences->getPreference($pref_no_self_mail, 0)));
 
     if (PhabricatorMetaMTAMail::shouldMultiplexAllMail()) {
       $re_control = id(new AphrontFormSelectControl())
         ->setName($pref_re_prefix)
         ->setOptions(
           array(
             'default'   => pht('Use Server Default (%s)', $re_prefix_default),
             'true'      => pht('Enable "Re:" prefix'),
             'false'     => pht('Disable "Re:" prefix'),
           ))
         ->setValue($re_prefix_value);
 
       $vary_control = id(new AphrontFormSelectControl())
         ->setName($pref_vary)
         ->setOptions(
           array(
             'default'   => pht('Use Server Default (%s)', $vary_default),
             'true'      => pht('Vary Subjects'),
             'false'     => pht('Do Not Vary Subjects'),
           ))
         ->setValue($vary_value);
     } else {
       $re_control = id(new AphrontFormStaticControl())
         ->setValue('Server Default ('.$re_prefix_default.')');
 
       $vary_control = id(new AphrontFormStaticControl())
         ->setValue('Server Default ('.$vary_default.')');
     }
 
     $form
       ->appendChild(
         $re_control
           ->setLabel(pht('Add "Re:" Prefix'))
           ->setCaption(
             pht('Enable this option to fix threading in Mail.app on OS X Lion,'.
             ' or if you like "Re:" in your email subjects.')))
       ->appendChild(
         $vary_control
           ->setLabel(pht('Vary Subjects'))
           ->setCaption(
             pht('This option adds more information to email subjects, but may '.
             'break threading in some clients.')));
 
     $mailtags = $preferences->getPreference('mailtags', array());
 
     $form->appendChild(
       id(new PHUIFormDividerControl()));
 
     $form->appendRemarkupInstructions(
       pht(
         'You can customize which kinds of events you receive email for '.
         'here. If you turn off email for a certain type of event, you '.
         'will receive an unread notification in Phabricator instead.'.
         "\n\n".
         'Phabricator notifications (shown in the menu bar) which you receive '.
         'an email for are marked read by default in Phabricator. If you turn '.
         'off email for a certain type of event, the corresponding '.
         'notification will not be marked read.'.
         "\n\n".
         'Note that if an update makes several changes (like adding CCs to a '.
         'task, closing it, and adding a comment) you will still receive '.
         'an email as long as at least one of the changes is set to notify '.
         'you.'.
         "\n\n".
         'These preferences **only** apply to objects you are connected to '.
         '(for example, Revisions where you are a reviewer or tasks you are '.
         'CC\'d on). To receive email alerts when other objects are created, '.
         'configure [[ /herald/ | Herald Rules ]].'.
         "\n\n".
         '**Phabricator will send an email to your primary account when:**'));
 
     $form
       ->appendChild(
         $this->buildMailTagCheckboxes(
           $this->getDifferentialMailTags(),
           $mailtags)
           ->setLabel(pht('Differential')));
 
     $maniphest = 'PhabricatorApplicationManiphest';
     if (PhabricatorApplication::isClassInstalled($maniphest)) {
       $form->appendChild(
         $this->buildMailTagCheckboxes(
           $this->getManiphestMailTags(),
           $mailtags)
           ->setLabel(pht('Maniphest')));
     }
 
     $form
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Save Preferences')));
 
-    $header = new PhabricatorHeaderView();
-    $header->setHeader(pht('Email Preferences'));
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Email Preferences'))
+      ->setFormError($notice)
+      ->setForm($form);
 
     return id(new AphrontNullView())
       ->appendChild(
         array(
-          $notice,
-          $header,
-          $form,
+          $form_box,
         ));
   }
 
   private function getMailTags() {
     return array(
       MetaMTANotificationType::TYPE_DIFFERENTIAL_REVIEW_REQUEST =>
         pht("A revision is created."),
       MetaMTANotificationType::TYPE_DIFFERENTIAL_UPDATED =>
         pht("A revision is updated."),
       MetaMTANotificationType::TYPE_DIFFERENTIAL_COMMENT =>
         pht("Someone comments on a revision."),
       MetaMTANotificationType::TYPE_DIFFERENTIAL_REVIEWERS =>
         pht("A revision's reviewers change."),
       MetaMTANotificationType::TYPE_DIFFERENTIAL_CLOSED =>
         pht("A revision is closed."),
       MetaMTANotificationType::TYPE_DIFFERENTIAL_CC =>
         pht("A revision's CCs change."),
       MetaMTANotificationType::TYPE_DIFFERENTIAL_OTHER =>
         pht("Other revision activity not listed above occurs."),
       MetaMTANotificationType::TYPE_MANIPHEST_STATUS =>
         pht("A task's status changes."),
       MetaMTANotificationType::TYPE_MANIPHEST_OWNER =>
         pht("A task's owner changes."),
       MetaMTANotificationType::TYPE_MANIPHEST_COMMENT =>
         pht("Someone comments on a task."),
       MetaMTANotificationType::TYPE_MANIPHEST_PRIORITY =>
         pht("A task's priority changes."),
       MetaMTANotificationType::TYPE_MANIPHEST_CC =>
         pht("A task's CCs change."),
       MetaMTANotificationType::TYPE_MANIPHEST_PROJECTS =>
         pht("A task's associated projects change."),
       MetaMTANotificationType::TYPE_MANIPHEST_OTHER =>
         pht("Other task activity not listed above occurs."),
 
     );
   }
 
   private function getManiphestMailTags() {
     return array_select_keys(
       $this->getMailTags(),
       array(
         MetaMTANotificationType::TYPE_MANIPHEST_STATUS,
         MetaMTANotificationType::TYPE_MANIPHEST_OWNER,
         MetaMTANotificationType::TYPE_MANIPHEST_PRIORITY,
         MetaMTANotificationType::TYPE_MANIPHEST_CC,
         MetaMTANotificationType::TYPE_MANIPHEST_PROJECTS,
         MetaMTANotificationType::TYPE_MANIPHEST_COMMENT,
         MetaMTANotificationType::TYPE_MANIPHEST_OTHER,
       ));
   }
 
   private function getDifferentialMailTags() {
     return array_select_keys(
       $this->getMailTags(),
       array(
         MetaMTANotificationType::TYPE_DIFFERENTIAL_REVIEW_REQUEST,
         MetaMTANotificationType::TYPE_DIFFERENTIAL_UPDATED,
         MetaMTANotificationType::TYPE_DIFFERENTIAL_COMMENT,
         MetaMTANotificationType::TYPE_DIFFERENTIAL_CLOSED,
         MetaMTANotificationType::TYPE_DIFFERENTIAL_REVIEWERS,
         MetaMTANotificationType::TYPE_DIFFERENTIAL_CC,
         MetaMTANotificationType::TYPE_DIFFERENTIAL_OTHER,
       ));
   }
 
   private function buildMailTagCheckboxes(
     array $tags,
     array $prefs) {
 
     $control = new AphrontFormCheckboxControl();
     foreach ($tags as $key => $label) {
       $control->addCheckbox(
         'mailtags['.$key.']',
         1,
         $label,
         idx($prefs, $key, 1));
     }
 
     return $control;
   }
 
 }
diff --git a/src/applications/settings/panel/PhabricatorSettingsPanelHomePreferences.php b/src/applications/settings/panel/PhabricatorSettingsPanelHomePreferences.php
index bce927a3b..0b2ee8b7e 100644
--- a/src/applications/settings/panel/PhabricatorSettingsPanelHomePreferences.php
+++ b/src/applications/settings/panel/PhabricatorSettingsPanelHomePreferences.php
@@ -1,214 +1,213 @@
 <?php
 
 final class PhabricatorSettingsPanelHomePreferences
   extends PhabricatorSettingsPanel {
 
   public function getPanelKey() {
     return 'home';
   }
 
   public function getPanelName() {
     return pht('Home Page');
   }
 
   public function getPanelGroup() {
     return pht('Application Settings');
   }
 
   public function processRequest(AphrontRequest $request) {
     $user = $request->getUser();
     $preferences = $user->loadPreferences();
 
     require_celerity_resource('phabricator-settings-css');
 
     $apps = PhabricatorApplication::getAllInstalledApplications();
     $pref_tiles = PhabricatorUserPreferences::PREFERENCE_APP_TILES;
     $tiles = $preferences->getPreference($pref_tiles, array());
 
     if ($request->isFormPost()) {
       $values = $request->getArr('tile');
       foreach ($apps as $app) {
         $key = get_class($app);
         $value = idx($values, $key);
         switch ($value) {
           case PhabricatorApplication::TILE_FULL:
           case PhabricatorApplication::TILE_SHOW:
           case PhabricatorApplication::TILE_HIDE:
             $tiles[$key] = $value;
             break;
           default:
             unset($tiles[$key]);
             break;
         }
       }
       $preferences->setPreference($pref_tiles, $tiles);
       $preferences->save();
 
       return id(new AphrontRedirectResponse())
         ->setURI($this->getPanelURI('?saved=true'));
     }
 
-    $header = id(new PhabricatorHeaderView())
-      ->setHeader(pht('Home Page Preferences'));
-
     $form = id(new AphrontFormView())
-      ->setFlexible(true)
       ->setUser($user);
 
     $group_map = PhabricatorApplication::getApplicationGroups();
 
     $output = array();
 
     $applications = PhabricatorApplication::getAllInstalledApplications();
 
     $applications = mgroup($applications, 'getApplicationGroup');
 
     $applications = array_select_keys(
     $applications,
     array_keys($group_map));
 
     foreach ($applications as $group => $apps) {
       $group_name = $group_map[$group];
       $rows = array();
 
       foreach ($apps as $app) {
         if (!$app->shouldAppearInLaunchView()) {
         continue;
         }
 
         $default = $app->getDefaultTileDisplay($user);
         if ($default == PhabricatorApplication::TILE_INVISIBLE) {
           continue;
         }
 
 
 
         $default_name = PhabricatorApplication::getTileDisplayName($default);
 
         $hide = PhabricatorApplication::TILE_HIDE;
         $show = PhabricatorApplication::TILE_SHOW;
         $full = PhabricatorApplication::TILE_FULL;
 
         $key = get_class($app);
 
         $default_radio_button_status =
           (idx($tiles, $key, 'default') == 'default') ? 'checked' : null;
 
         $hide_radio_button_status =
           (idx($tiles, $key, 'default') == $hide) ? 'checked' : null;
 
         $show_radio_button_status =
           (idx($tiles, $key, 'default') == $show) ? 'checked' : null;
 
         $full_radio_button_status =
           (idx($tiles, $key, 'default') == $full) ? 'checked' : null;
 
 
         $default_radio_button = phutil_tag(
           'input',
           array(
             'type' => 'radio',
             'name' => 'tile['.$key.']',
             'value' => 'default',
             'checked' => $default_radio_button_status,
           ));
 
         $hide_radio_button = phutil_tag(
           'input',
           array(
             'type' => 'radio',
             'name' => 'tile['.$key.']',
             'value' => $hide,
             'checked' => $hide_radio_button_status,
           ));
 
         $show_radio_button = phutil_tag(
           'input',
           array(
             'type' => 'radio',
             'name' => 'tile['.$key.']',
             'value' => $show,
             'checked' => $show_radio_button_status,
           ));
 
         $full_radio_button = phutil_tag(
           'input',
           array(
             'type' => 'radio',
             'name' => 'tile['.$key.']',
             'value' => $full,
             'checked' => $full_radio_button_status,
           ));
 
         $app_column = hsprintf(
                         "<strong>%s</strong><br /><em> Default: %s</em>"
                         , $app->getName(), $default_name);
 
         $rows[] = array(
           $app_column,
           $default_radio_button,
           $hide_radio_button,
           $show_radio_button,
           $full_radio_button,
           );
       }
 
       if (empty($rows)) {
         continue;
       }
 
       $table = new AphrontTableView($rows);
 
       $table
         ->setClassName('phabricator-settings-homepagetable')
         ->setHeaders(
           array(
             pht('Applications'),
             pht('Default'),
             pht('Hidden'),
             pht('Small'),
             pht('Large'),
             ))
         ->setColumnClasses(
           array(
             '',
             'fixed',
             'fixed',
             'fixed',
             'fixed',
           ));
 
 
       $panel = id(new AphrontPanelView())
                  ->setHeader($group_name)
                  ->addClass('phabricator-settings-panelview')
                  ->appendChild($table)
                  ->setNoBackground();
 
 
       $output[] = $panel;
 
     }
 
     $form
       ->appendChild($output)
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Save Preferences')));
 
     $error_view = null;
     if ($request->getStr('saved') === 'true') {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Preferences Saved'))
         ->setSeverity(AphrontErrorView::SEVERITY_NOTICE)
         ->setErrors(array(pht('Your preferences have been saved.')));
     }
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Home Page Preferences'))
+      ->setFormError($error_view)
+      ->setForm($form);
+
     return array(
-      $header,
-      $error_view,
-      $form,
+      $form_box,
     );
   }
 }
 
diff --git a/src/applications/settings/panel/PhabricatorSettingsPanelPassword.php b/src/applications/settings/panel/PhabricatorSettingsPanelPassword.php
index 1b3e7dd1f..a36bce7c9 100644
--- a/src/applications/settings/panel/PhabricatorSettingsPanelPassword.php
+++ b/src/applications/settings/panel/PhabricatorSettingsPanelPassword.php
@@ -1,171 +1,171 @@
 <?php
 
 final class PhabricatorSettingsPanelPassword
   extends PhabricatorSettingsPanel {
 
   public function getPanelKey() {
     return 'password';
   }
 
   public function getPanelName() {
     return pht('Password');
   }
 
   public function getPanelGroup() {
     return pht('Authentication');
   }
 
   public function isEnabled() {
     // There's no sense in showing a change password panel if the user
     // can't change their password...
 
     if (!PhabricatorEnv::getEnvConfig('account.editable')) {
       return false;
     }
 
     // ...or this install doesn't support password authentication at all.
 
     if (!PhabricatorAuthProviderPassword::getPasswordProvider()) {
       return false;
     }
 
     return true;
   }
 
   public function processRequest(AphrontRequest $request) {
     $user = $request->getUser();
 
     $min_len = PhabricatorEnv::getEnvConfig('account.minimum-password-length');
     $min_len = (int)$min_len;
 
     // NOTE: To change your password, you need to prove you own the account,
     // either by providing the old password or by carrying a token to
     // the workflow from a password reset email.
 
     $token = $request->getStr('token');
 
     $valid_token = false;
     if ($token) {
       $email_address = $request->getStr('email');
       $email = id(new PhabricatorUserEmail())->loadOneWhere(
         'address = %s',
         $email_address);
       if ($email) {
         $valid_token = $user->validateEmailToken($email, $token);
       }
     }
 
     $e_old = true;
     $e_new = true;
     $e_conf = true;
 
     $errors = array();
     if ($request->isFormPost()) {
       if (!$valid_token) {
         $envelope = new PhutilOpaqueEnvelope($request->getStr('old_pw'));
         if (!$user->comparePassword($envelope)) {
           $errors[] = pht('The old password you entered is incorrect.');
           $e_old = pht('Invalid');
         }
       }
 
       $pass = $request->getStr('new_pw');
       $conf = $request->getStr('conf_pw');
 
       if (strlen($pass) < $min_len) {
         $errors[] = pht('Your new password is too short.');
         $e_new = pht('Too Short');
       }
 
       if ($pass !== $conf) {
         $errors[] = pht('New password and confirmation do not match.');
         $e_conf = pht('Invalid');
       }
 
       if (!$errors) {
         // This write is unguarded because the CSRF token has already
         // been checked in the call to $request->isFormPost() and
         // the CSRF token depends on the password hash, so when it
         // is changed here the CSRF token check will fail.
         $unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
 
           $envelope = new PhutilOpaqueEnvelope($pass);
           id(new PhabricatorUserEditor())
             ->setActor($user)
             ->changePassword($user, $envelope);
 
         unset($unguarded);
 
         if ($valid_token) {
           // If this is a password set/reset, kick the user to the home page
           // after we update their account.
           $next = '/';
         } else {
           $next = $this->getPanelURI('?saved=true');
         }
 
         return id(new AphrontRedirectResponse())->setURI($next);
       }
     }
 
     $notice = null;
     if (!$errors) {
       if ($request->getStr('saved')) {
         $notice = new AphrontErrorView();
         $notice->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
         $notice->setTitle(pht('Changes Saved'));
         $notice->appendChild(
           phutil_tag('p', array(), pht('Your password has been updated.')));
       }
     } else {
       $notice = new AphrontErrorView();
       $notice->setTitle(pht('Error Changing Password'));
       $notice->setErrors($errors);
     }
 
     $len_caption = null;
     if ($min_len) {
       $len_caption = pht('Minimum password length: %d characters.', $min_len);
     }
 
     $form = new AphrontFormView();
     $form
       ->setUser($user)
       ->addHiddenInput('token', $token);
 
     if (!$valid_token) {
       $form->appendChild(
         id(new AphrontFormPasswordControl())
           ->setLabel(pht('Old Password'))
           ->setError($e_old)
           ->setName('old_pw'));
     }
 
     $form
       ->appendChild(
         id(new AphrontFormPasswordControl())
           ->setLabel(pht('New Password'))
           ->setError($e_new)
           ->setName('new_pw'));
     $form
       ->appendChild(
         id(new AphrontFormPasswordControl())
           ->setLabel(pht('Confirm Password'))
           ->setCaption($len_caption)
           ->setError($e_conf)
           ->setName('conf_pw'));
     $form
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Save')));
 
-    $header = new PhabricatorHeaderView();
-    $header->setHeader(pht('Change Password'));
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Delete User'))
+      ->setFormError($notice)
+      ->setForm($form);
 
     return array(
-      $notice,
-      $header,
-      $form,
+      $form_box,
     );
   }
 }
diff --git a/src/applications/settings/panel/PhabricatorSettingsPanelSearchPreferences.php b/src/applications/settings/panel/PhabricatorSettingsPanelSearchPreferences.php
index 0d851f4ff..3b2b18a5d 100644
--- a/src/applications/settings/panel/PhabricatorSettingsPanelSearchPreferences.php
+++ b/src/applications/settings/panel/PhabricatorSettingsPanelSearchPreferences.php
@@ -1,71 +1,71 @@
 <?php
 
 final class PhabricatorSettingsPanelSearchPreferences
   extends PhabricatorSettingsPanel {
 
   public function getPanelKey() {
     return 'search';
   }
 
   public function getPanelName() {
     return pht('Search Preferences');
   }
 
   public function getPanelGroup() {
     return pht('Application Settings');
   }
 
   public function processRequest(AphrontRequest $request) {
     $user = $request->getUser();
     $preferences = $user->loadPreferences();
 
     $pref_jump     = PhabricatorUserPreferences::PREFERENCE_SEARCHBAR_JUMP;
     $pref_shortcut = PhabricatorUserPreferences::PREFERENCE_SEARCH_SHORTCUT;
 
     if ($request->isFormPost()) {
       $preferences->setPreference($pref_jump,
         $request->getBool($pref_jump));
 
       $preferences->setPreference($pref_shortcut,
         $request->getBool($pref_shortcut));
 
       $preferences->save();
       return id(new AphrontRedirectResponse())
         ->setURI($this->getPanelURI('?saved=true'));
     }
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->appendChild(
         id(new AphrontFormCheckboxControl())
           ->addCheckbox($pref_jump,
             1,
             pht('Enable jump nav functionality in all search boxes.'),
             $preferences->getPreference($pref_jump, 1))
           ->addCheckbox($pref_shortcut,
             1,
             pht("Press '/' to focus the search input."),
             $preferences->getPreference($pref_shortcut, 1)))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Save')));
 
-    $header = new PhabricatorHeaderView();
-    $header->setHeader(pht('Search Preferences'));
-
     $error_view = null;
     if ($request->getStr('saved') === 'true') {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Preferences Saved'))
         ->setSeverity(AphrontErrorView::SEVERITY_NOTICE)
         ->setErrors(array(pht('Your preferences have been saved.')));
     }
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText(pht('Search Preferences'))
+      ->setFormError($error_view)
+      ->setForm($form);
+
     return array(
-      $error_view,
-      $header,
-      $form,
+      $form_box,
     );
   }
 }
 
diff --git a/src/applications/slowvote/controller/PhabricatorSlowvoteEditController.php b/src/applications/slowvote/controller/PhabricatorSlowvoteEditController.php
index 1c732c88a..298fd6345 100644
--- a/src/applications/slowvote/controller/PhabricatorSlowvoteEditController.php
+++ b/src/applications/slowvote/controller/PhabricatorSlowvoteEditController.php
@@ -1,247 +1,250 @@
 <?php
 
 /**
  * @group slowvote
  */
 final class PhabricatorSlowvoteEditController
   extends PhabricatorSlowvoteController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     if ($this->id) {
       $poll = id(new PhabricatorSlowvoteQuery())
         ->setViewer($user)
         ->withIDs(array($this->id))
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_VIEW,
             PhabricatorPolicyCapability::CAN_EDIT,
           ))
         ->executeOne();
       if (!$poll) {
         return new Aphront404Response();
       }
       $is_new = false;
     } else {
       $poll = id(new PhabricatorSlowvotePoll())
         ->setAuthorPHID($user->getPHID())
         ->setViewPolicy(PhabricatorPolicies::POLICY_USER);
       $is_new = true;
     }
 
     $e_question = true;
     $e_response = true;
     $errors = array();
 
     $v_question = $poll->getQuestion();
     $v_description = $poll->getDescription();
     $v_responses = $poll->getResponseVisibility();
     $v_shuffle = $poll->getShuffle();
 
     $responses = $request->getArr('response');
     if ($request->isFormPost()) {
       $v_question = $request->getStr('question');
       $v_description = $request->getStr('description');
       $v_responses = (int)$request->getInt('responses');
       $v_shuffle = (int)$request->getBool('shuffle');
 
       if ($is_new) {
         $poll->setMethod($request->getInt('method'));
       }
 
       if (!strlen($v_question)) {
         $e_question = pht('Required');
         $errors[] = pht('You must ask a poll question.');
       } else {
         $e_question = null;
       }
 
       if ($is_new) {
         $responses = array_filter($responses);
         if (empty($responses)) {
           $errors[] = pht('You must offer at least one response.');
           $e_response = pht('Required');
         } else {
           $e_response = null;
         }
       }
 
       $xactions = array();
       $template = id(new PhabricatorSlowvoteTransaction());
 
       $xactions[] = id(clone $template)
         ->setTransactionType(PhabricatorSlowvoteTransaction::TYPE_QUESTION)
         ->setNewValue($v_question);
 
       $xactions[] = id(clone $template)
         ->setTransactionType(PhabricatorSlowvoteTransaction::TYPE_DESCRIPTION)
         ->setNewValue($v_description);
 
       $xactions[] = id(clone $template)
         ->setTransactionType(PhabricatorSlowvoteTransaction::TYPE_RESPONSES)
         ->setNewValue($v_responses);
 
       $xactions[] = id(clone $template)
         ->setTransactionType(PhabricatorSlowvoteTransaction::TYPE_SHUFFLE)
         ->setNewValue($v_shuffle);
 
       if (empty($errors)) {
         $editor = id(new PhabricatorSlowvoteEditor())
           ->setActor($user)
           ->setContinueOnNoEffect(true)
           ->setContentSourceFromRequest($request);
 
         $xactions = $editor->applyTransactions($poll, $xactions);
 
         if ($is_new) {
           $poll->save();
 
           foreach ($responses as $response) {
             $option = new PhabricatorSlowvoteOption();
             $option->setName($response);
             $option->setPollID($poll->getID());
             $option->save();
           }
         }
 
         return id(new AphrontRedirectResponse())
           ->setURI('/V'.$poll->getID());
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setTitle(pht('Form Errors'));
       $error_view->setErrors($errors);
     }
 
     $instructions =
       phutil_tag(
         'p',
         array(
           'class' => 'aphront-form-instructions',
         ),
         pht('Resolve issues and build consensus through '.
           'protracted deliberation.'));
 
     $form = id(new AphrontFormView())
       ->setUser($user)
-      ->setFlexible(true)
       ->appendChild($instructions)
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_SHORT)
           ->setLabel(pht('Question'))
           ->setName('question')
           ->setValue($v_question)
           ->setError($e_question))
       ->appendChild(
         id(new PhabricatorRemarkupControl())
           ->setLabel(pht('Description'))
           ->setName('description')
           ->setValue($v_description));
 
     if ($is_new) {
       for ($ii = 0; $ii < 10; $ii++) {
         $n = ($ii + 1);
         $response = id(new AphrontFormTextControl())
           ->setLabel(pht("Response %d", $n))
           ->setName('response[]')
           ->setValue(idx($responses, $ii, ''));
 
         if ($ii == 0) {
           $response->setError($e_response);
         }
 
         $form->appendChild($response);
       }
     }
 
     $poll_type_options = array(
       PhabricatorSlowvotePoll::METHOD_PLURALITY =>
         pht('Plurality (Single Choice)'),
       PhabricatorSlowvotePoll::METHOD_APPROVAL  =>
         pht('Approval (Multiple Choice)'),
     );
 
     $response_type_options = array(
       PhabricatorSlowvotePoll::RESPONSES_VISIBLE
         => pht('Allow anyone to see the responses'),
       PhabricatorSlowvotePoll::RESPONSES_VOTERS
         => pht('Require a vote to see the responses'),
       PhabricatorSlowvotePoll::RESPONSES_OWNER
         => pht('Only I can see the responses'),
     );
 
     if ($is_new) {
       $form->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Vote Type'))
           ->setName('method')
           ->setValue($poll->getMethod())
           ->setOptions($poll_type_options));
     } else {
       $form->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel(pht('Vote Type'))
           ->setValue(idx($poll_type_options, $poll->getMethod())));
     }
 
     if ($is_new) {
       $title = pht('Create Slowvote');
       $button = pht('Create');
       $cancel_uri = $this->getApplicationURI();
     } else {
       $title = pht('Edit %s', 'V'.$poll->getID());
       $button = pht('Save Changes');
       $cancel_uri = '/V'.$poll->getID();
     }
 
     $form
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Responses'))
           ->setName('responses')
           ->setValue($v_responses)
           ->setOptions($response_type_options))
       ->appendChild(
         id(new AphrontFormCheckboxControl())
           ->setLabel(pht('Shuffle'))
           ->addCheckbox(
             'shuffle',
             1,
             pht('Show choices in random order.'),
             $v_shuffle))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue($button)
           ->addCancelButton($cancel_uri));
 
     $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView());
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($title));
 
+    $form_box = id(new PHUIFormBoxView())
+      ->setHeaderText($title)
+      ->setFormError($error_view)
+      ->setForm($form);
+
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $error_view,
-        $form,
+        $form_box,
       ),
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/transactions/controller/PhabricatorApplicationTransactionCommentEditController.php b/src/applications/transactions/controller/PhabricatorApplicationTransactionCommentEditController.php
index 80f89e9b0..a03ee84e6 100644
--- a/src/applications/transactions/controller/PhabricatorApplicationTransactionCommentEditController.php
+++ b/src/applications/transactions/controller/PhabricatorApplicationTransactionCommentEditController.php
@@ -1,82 +1,82 @@
 <?php
 
 final class PhabricatorApplicationTransactionCommentEditController
   extends PhabricatorApplicationTransactionController {
 
   private $phid;
 
   public function willProcessRequest(array $data) {
     $this->phid = $data['phid'];
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $xaction = id(new PhabricatorObjectQuery())
       ->withPHIDs(array($this->phid))
       ->setViewer($user)
       ->executeOne();
 
     if (!$xaction) {
       // TODO: This may also mean you don't have permission to edit the object,
       // but we can't make that distinction via PhabricatorObjectHandleData
       // at the moment.
       return new Aphront404Response();
     }
 
     if (!$xaction->getComment()) {
       // You can't currently edit a transaction which doesn't have a comment.
       // Some day you may be able to edit the visibility.
       return new Aphront404Response();
     }
 
     $obj_phid = $xaction->getObjectPHID();
     $obj_handle = PhabricatorObjectHandleData::loadOneHandle($obj_phid, $user);
 
     if ($request->isDialogFormPost()) {
       $text = $request->getStr('text');
 
       $comment = $xaction->getApplicationTransactionCommentObject();
       $comment->setContent($text);
       if (!strlen($text)) {
         $comment->setIsDeleted(true);
       }
 
       $editor = id(new PhabricatorApplicationTransactionCommentEditor())
         ->setActor($user)
         ->setContentSource(PhabricatorContentSource::newFromRequest($request))
         ->applyEdit($xaction, $comment);
 
       if ($request->isAjax()) {
         return id(new PhabricatorApplicationTransactionResponse())
           ->setViewer($user)
           ->setTransactions(array($xaction))
           ->setAnchorOffset($request->getStr('anchor'));
       } else {
         return id(new AphrontReloadResponse())->setURI($obj_handle->getURI());
       }
     }
 
     $dialog = id(new AphrontDialogView())
       ->setUser($user)
       ->setTitle(pht('Edit Comment'));
 
     $dialog
       ->addHiddenInput('anchor', $request->getStr('anchor'))
       ->appendChild(
-        id(new AphrontFormLayoutView())
+        id(new PHUIFormLayoutView())
         ->setFullWidth(true)
         ->appendChild(
           id(new PhabricatorRemarkupControl())
           ->setName('text')
           ->setValue($xaction->getComment()->getContent())));
 
     $dialog
       ->addSubmitButton(pht('Edit Comment'))
       ->addCancelButton($obj_handle->getURI());
 
     return id(new AphrontDialogResponse())->setDialog($dialog);
   }
 
 }
diff --git a/src/applications/transactions/view/PhabricatorApplicationTransactionCommentView.php b/src/applications/transactions/view/PhabricatorApplicationTransactionCommentView.php
index 767b75d77..dda88cdc3 100644
--- a/src/applications/transactions/view/PhabricatorApplicationTransactionCommentView.php
+++ b/src/applications/transactions/view/PhabricatorApplicationTransactionCommentView.php
@@ -1,238 +1,238 @@
 <?php
 
 /**
  * @concrete-extensible
  */
 class PhabricatorApplicationTransactionCommentView extends AphrontView {
 
   private $submitButtonName;
   private $action;
 
   private $previewPanelID;
   private $previewTimelineID;
   private $previewToggleID;
   private $formID;
   private $statusID;
   private $commentID;
   private $draft;
   private $requestURI;
   private $showPreview = true;
   private $objectPHID;
 
   public function setObjectPHID($object_phid) {
     $this->objectPHID = $object_phid;
     return $this;
   }
 
   public function getObjectPHID() {
     return $this->objectPHID;
   }
 
   public function setShowPreview($show_preview) {
     $this->showPreview = $show_preview;
     return $this;
   }
 
   public function getShowPreview() {
     return $this->showPreview;
   }
 
   public function setRequestURI(PhutilURI $request_uri) {
     $this->requestURI = $request_uri;
     return $this;
   }
   public function getRequestURI() {
     return $this->requestURI;
   }
 
   public function setDraft(PhabricatorDraft $draft) {
     $this->draft = $draft;
     return $this;
   }
 
   public function getDraft() {
     return $this->draft;
   }
 
   public function setSubmitButtonName($submit_button_name) {
     $this->submitButtonName = $submit_button_name;
     return $this;
   }
 
   public function getSubmitButtonName() {
     return $this->submitButtonName;
   }
 
   public function setAction($action) {
     $this->action = $action;
     return $this;
   }
 
   public function getAction() {
     return $this->action;
   }
 
   public function render() {
 
     $user = $this->getUser();
     if (!$user->isLoggedIn()) {
       $uri = id(new PhutilURI('/login/'))
         ->setQueryParam('next', (string) $this->getRequestURI());
       return phutil_tag(
         'div',
         array(
           'class' => 'login-to-comment'
         ),
         javelin_tag(
           'a',
           array(
             'class' => 'button',
             'sigil' => 'workflow',
             'href' => $uri
           ),
           pht('Login to Comment')));
     }
 
     $data = array();
 
     $comment = $this->renderCommentPanel();
 
     if ($this->getShowPreview()) {
       $preview = $this->renderPreviewPanel();
     } else {
       $preview = null;
     }
 
     Javelin::initBehavior(
       'phabricator-transaction-comment-form',
       array(
         'formID'        => $this->getFormID(),
         'timelineID'    => $this->getPreviewTimelineID(),
         'panelID'       => $this->getPreviewPanelID(),
         'statusID'      => $this->getStatusID(),
         'commentID'     => $this->getCommentID(),
 
         'loadingString' => pht('Loading Preview...'),
         'savingString'  => pht('Saving Draft...'),
         'draftString'   => pht('Saved Draft'),
 
         'showPreview'   => $this->getShowPreview(),
 
         'actionURI'     => $this->getAction(),
         'draftKey'      => $this->getDraft()
           ? $this->getDraft()->getDraftKey()
           : null,
       ));
 
     return array($comment, $preview);
   }
 
   private function renderCommentPanel() {
     $status = phutil_tag(
       'div',
       array(
         'id' => $this->getStatusID(),
       ),
       '');
 
     $draft_comment = '';
     if ($this->getDraft()) {
       $draft_comment = $this->getDraft()->getDraft();
     }
 
     if (!$this->getObjectPHID()) {
       throw new Exception("Call setObjectPHID() before render()!");
     }
 
     return id(new AphrontFormView())
       ->setUser($this->getUser())
-      ->setFlexible(true)
       ->addSigil('transaction-append')
       ->setWorkflow(true)
+      ->setShaded(true)
       ->setMetadata(
         array(
           'objectPHID' => $this->getObjectPHID(),
         ))
       ->setAction($this->getAction())
       ->setID($this->getFormID())
       ->appendChild(
         id(new PhabricatorRemarkupControl())
           ->setID($this->getCommentID())
           ->setName('comment')
           ->setLabel(pht('Comment'))
           ->setUser($this->getUser())
           ->setValue($draft_comment))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue($this->getSubmitButtonName()))
       ->appendChild(
         id(new AphrontFormMarkupControl())
           ->setValue($status));
   }
 
   private function renderPreviewPanel() {
 
     $preview = id(new PhabricatorTimelineView())
       ->setID($this->getPreviewTimelineID());
 
     $header = phutil_tag(
       'div',
       array(
         'class' => 'phabricator-timeline-preview-header',
       ),
       pht('Preview'));
 
     return phutil_tag(
       'div',
       array(
         'id'    => $this->getPreviewPanelID(),
         'style' => 'display: none',
       ),
       array(
         $header,
         $preview,
       ));
   }
 
   private function getPreviewPanelID() {
     if (!$this->previewPanelID) {
       $this->previewPanelID = celerity_generate_unique_node_id();
     }
     return $this->previewPanelID;
   }
 
   private function getPreviewTimelineID() {
     if (!$this->previewTimelineID) {
       $this->previewTimelineID = celerity_generate_unique_node_id();
     }
     return $this->previewTimelineID;
   }
 
   public function setFormID($id) {
     $this->formID = $id;
     return $this;
   }
 
   private function getFormID() {
     if (!$this->formID) {
       $this->formID = celerity_generate_unique_node_id();
     }
     return $this->formID;
   }
 
   private function getStatusID() {
     if (!$this->statusID) {
       $this->statusID = celerity_generate_unique_node_id();
     }
     return $this->statusID;
   }
 
   private function getCommentID() {
     if (!$this->commentID) {
       $this->commentID = celerity_generate_unique_node_id();
     }
     return $this->commentID;
   }
 
 }
 
diff --git a/src/applications/uiexample/examples/PhabricatorFormExample.php b/src/applications/uiexample/examples/PhabricatorFormExample.php
index ab067bd22..8956f4387 100644
--- a/src/applications/uiexample/examples/PhabricatorFormExample.php
+++ b/src/applications/uiexample/examples/PhabricatorFormExample.php
@@ -1,53 +1,52 @@
 <?php
 
 final class PhabricatorFormExample extends PhabricatorUIExample {
 
   public function getName() {
     return 'Form';
   }
 
   public function getDescription() {
     return hsprintf('Use <tt>AphrontFormView</tt> to render forms.');
   }
 
   public function renderExample() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $start_time = id(new AphrontFormDateControl())
       ->setUser($user)
       ->setName('start')
       ->setLabel('Start')
       ->setInitialTime(AphrontFormDateControl::TIME_START_OF_BUSINESS);
 
     $end_time = id(new AphrontFormDateControl())
       ->setUser($user)
       ->setName('end')
       ->setLabel('End')
       ->setInitialTime(AphrontFormDateControl::TIME_END_OF_BUSINESS);
 
     $null_time = id(new AphrontFormDateControl())
       ->setUser($user)
       ->setName('nulltime')
       ->setLabel('Nullable')
       ->setAllowNull(true);
 
     if ($request->isFormPost()) {
       $start_value = $start_time->readValueFromRequest($request);
       $end_value = $end_time->readValueFromRequest($request);
       $null_value = $null_time->readValueFromRequest($request);
     }
 
     $form = id(new AphrontFormView())
       ->setUser($user)
-      ->setFlexible(true)
       ->appendChild($start_time)
       ->appendChild($end_time)
       ->appendChild($null_time)
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue('Submit'));
 
     return $form;
   }
 }
diff --git a/src/applications/uiexample/examples/PhabricatorMultiColumnExample.php b/src/applications/uiexample/examples/PhabricatorMultiColumnExample.php
index bd87e7e2e..6b3dc1a54 100644
--- a/src/applications/uiexample/examples/PhabricatorMultiColumnExample.php
+++ b/src/applications/uiexample/examples/PhabricatorMultiColumnExample.php
@@ -1,225 +1,225 @@
 <?php
 
 final class PhabricatorMultiColumnExample extends PhabricatorUIExample {
 
   public function getName() {
     return 'Multiple Column Layouts';
   }
 
   public function getDescription() {
     return 'A container good for 1-7 equally spaced columns. '.
       'Fixed and Fluid layouts.';
   }
 
   public function renderExample() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $column1 = phutil_tag(
       'div',
         array(
           'class' => 'pm',
           'style' => 'border: 1px solid green;'
         ),
         'Bruce Campbell');
 
     $column2 = phutil_tag(
       'div',
         array(
           'class' => 'pm',
           'style' => 'border: 1px solid blue;'
         ),
         'Army of Darkness');
 
     $head1 = id(new PhabricatorHeaderView())
       ->setHeader(pht('2 Column Fixed'));
     $layout1 = id(new AphrontMultiColumnView())
       ->addColumn($column1)
       ->addColumn($column2)
       ->setGutter(AphrontMultiColumnView::GUTTER_MEDIUM);
 
     $head2 = id(new PhabricatorHeaderView())
       ->setHeader(pht('2 Column Fluid'));
     $layout2 = id(new AphrontMultiColumnView())
       ->addColumn($column1)
       ->addColumn($column2)
       ->setFluidLayout(true)
       ->setGutter(AphrontMultiColumnView::GUTTER_MEDIUM);
 
     $head3 = id(new PhabricatorHeaderView())
       ->setHeader(pht('4 Column Fixed'));
     $layout3 = id(new AphrontMultiColumnView())
       ->addColumn($column1)
       ->addColumn($column2)
       ->addColumn($column1)
       ->addColumn($column2)
       ->setGutter(AphrontMultiColumnView::GUTTER_SMALL);
 
     $head4 = id(new PhabricatorHeaderView())
       ->setHeader(pht('4 Column Fluid'));
     $layout4 = id(new AphrontMultiColumnView())
       ->addColumn($column1)
       ->addColumn($column2)
       ->addColumn($column1)
       ->addColumn($column2)
       ->setFluidLayout(true)
       ->setGutter(AphrontMultiColumnView::GUTTER_SMALL);
 
     $sunday = hsprintf('<strong>Sunday</strong><br /><br />Watch Football'.
       '<br />Code<br />Eat<br />Sleep');
 
     $monday = hsprintf('<strong>Monday</strong><br /><br />Code'.
       '<br />Eat<br />Sleep');
 
     $tuesday = hsprintf('<strong>Tuesday</strong><br />'.
       '<br />Code<br />Eat<br />Sleep');
 
     $wednesday = hsprintf('<strong>Wednesday</strong><br /><br />Code'.
       '<br />Eat<br />Sleep');
 
     $thursday = hsprintf('<strong>Thursday</strong><br />'.
       '<br />Code<br />Eat<br />Sleep');
 
     $friday = hsprintf('<strong>Friday</strong><br /><br />Code'.
       '<br />Eat<br />Sleep');
 
     $saturday = hsprintf('<strong>Saturday</strong><br /><br />StarCraft II'.
       '<br />All<br />Damn<br />Day');
 
     $head5 = id(new PhabricatorHeaderView())
       ->setHeader(pht('7 Column Fluid'));
     $layout5 = id(new AphrontMultiColumnView())
       ->addColumn($sunday)
       ->addColumn($monday)
       ->addColumn($tuesday)
       ->addColumn($wednesday)
       ->addColumn($thursday)
       ->addColumn($friday)
       ->addColumn($saturday)
       ->setFluidLayout(true)
       ->setShadow(true);
 
-    $shipping = id(new AphrontFormLayoutView())
+    $shipping = id(new PHUIFormLayoutView())
       ->setUser($user)
       ->setFullWidth(true)
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel('Name')
         ->setDisableAutocomplete(true)
         ->setSigil('name-input'))
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel('Address')
         ->setDisableAutocomplete(true)
         ->setSigil('address-input'))
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel('City/State')
         ->setDisableAutocomplete(true)
         ->setSigil('city-input'))
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel('Country')
         ->setDisableAutocomplete(true)
         ->setSigil('country-input'))
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel('Postal Code')
         ->setDisableAutocomplete(true)
         ->setSigil('postal-input'));
 
-    $cc = id(new AphrontFormLayoutView())
+    $cc = id(new PHUIFormLayoutView())
       ->setUser($user)
       ->setFullWidth(true)
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel('Card Number')
         ->setDisableAutocomplete(true)
         ->setSigil('number-input')
         ->setError(''))
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel('CVC')
         ->setDisableAutocomplete(true)
         ->setSigil('cvc-input')
         ->setError(''))
       ->appendChild(
         id(new PhortuneMonthYearExpiryControl())
         ->setLabel('Expiration')
         ->setUser($user)
         ->setError(''));
 
     $shipping_title = pht('Shipping Address');
     $billing_title = pht('Billing Address');
     $cc_title = pht('Payment Information');
 
     $head6 = id(new PhabricatorHeaderView())
       ->setHeader(pht('Let\'s Go Shopping'));
     $layout6 = id(new AphrontMultiColumnView())
       ->addColumn(hsprintf('<h1>%s</h1>%s', $shipping_title, $shipping))
       ->addColumn(hsprintf('<h1>%s</h1>%s', $billing_title, $shipping))
       ->addColumn(hsprintf('<h1>%s</h1>%s', $cc_title, $cc))
       ->setFluidLayout(true)
       ->setShadow(true);
 
     $wrap1 = phutil_tag(
       'div',
         array(
           'class' => 'ml'
         ),
         $layout1);
 
     $wrap2 = phutil_tag(
       'div',
         array(
           'class' => 'ml'
         ),
         $layout2);
 
     $wrap3 = phutil_tag(
       'div',
         array(
           'class' => 'ml'
         ),
         $layout3);
 
     $wrap4 = phutil_tag(
       'div',
         array(
           'class' => 'ml'
         ),
         $layout4);
 
     $wrap5 = phutil_tag(
       'div',
         array(
           'class' => 'ml'
         ),
         $layout5);
 
     $wrap6 = phutil_tag(
       'div',
         array(
           'class' => 'ml'
         ),
         $layout6);
 
     return phutil_tag(
       'div',
         array(),
         array(
           $head1,
           $wrap1,
           $head2,
           $wrap2,
           $head3,
           $wrap3,
           $head4,
           $wrap4,
           $head5,
           $wrap5,
           $head6,
           $wrap6
         ));
   }
 }
diff --git a/src/applications/uiexample/examples/PhabricatorUIListFilterExample.php b/src/applications/uiexample/examples/PhabricatorUIListFilterExample.php
index 7af6c12b7..81ce37b04 100644
--- a/src/applications/uiexample/examples/PhabricatorUIListFilterExample.php
+++ b/src/applications/uiexample/examples/PhabricatorUIListFilterExample.php
@@ -1,35 +1,34 @@
 <?php
 
 final class PhabricatorUIListFilterExample extends PhabricatorUIExample {
 
   public function getName() {
     return 'ListFilter';
   }
 
   public function getDescription() {
     return hsprintf(
       'Use <tt>AphrontListFilterView</tt> to layout controls for filtering '.
       'and manipulating lists of objects.');
   }
 
   public function renderExample() {
 
     $filter = new AphrontListFilterView();
 
     $form = new AphrontFormView();
-    $form->setNoShading(true);
     $form->setUser($this->getRequest()->getUser());
     $form
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel('Query'))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue('Search'));
 
     $filter->appendChild($form);
 
 
     return $filter;
   }
 }
diff --git a/src/infrastructure/celerity/CeleritySpriteGenerator.php b/src/infrastructure/celerity/CeleritySpriteGenerator.php
index 9e0a89a27..7a184675a 100644
--- a/src/infrastructure/celerity/CeleritySpriteGenerator.php
+++ b/src/infrastructure/celerity/CeleritySpriteGenerator.php
@@ -1,750 +1,751 @@
 <?php
 
 final class CeleritySpriteGenerator {
 
   public function buildIconSheet() {
     $icons = $this->getDirectoryList('icons_1x');
 
     $colors = array(
       '',
       'grey',
       'white',
     );
 
     $scales = array(
       '1x'  => 1,
       '2x'  => 2,
     );
 
     $template = id(new PhutilSprite())
       ->setSourceSize(14, 14);
 
     $sprites = array();
     foreach ($colors as $color) {
       foreach ($icons as $icon) {
         $prefix = 'icons_';
         if (strlen($color)) {
           $prefix .= $color.'_';
         }
 
         $suffix = '';
         if (strlen($color)) {
           $suffix = '-'.$color;
         }
 
         $sprite = id(clone $template)
           ->setName('icons-'.$icon.$suffix);
 
         $tcss = array();
         $tcss[] = '.icons-'.$icon.$suffix;
         if ($color == 'white') {
           $tcss[] = '.device-desktop .phabricator-action-view:hover '.
             '.icons-'.$icon;
           $tcss[] = '.device-desktop .phui-list-sidenav '.
             '.phui-list-item-href:hover .icons-'.$icon;
         }
 
         $sprite->setTargetCSS(implode(', ', $tcss));
 
         foreach ($scales as $scale_key => $scale) {
           $path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
           $sprite->setSourceFile($path, $scale);
         }
         $sprites[] = $sprite;
       }
     }
 
     $remarkup_icons = $this->getDirectoryList('remarkup_1x');
     foreach ($remarkup_icons as $icon) {
       $prefix = 'remarkup_';
 
       // Strip 'text_' from these file names.
       $class_name = substr($icon, 5);
 
       if ($class_name == 'order_off') {
         $tcss = '.remarkup-control-order-mode .remarkup-assist-order';
       } else if ($class_name == 'chaos_off') {
         $tcss = '.remarkup-control-chaos-mode .remarkup-assist-chaos';
       } else {
         $tcss = '.remarkup-assist-'.$class_name;
       }
 
       $sprite = id(clone $template)
         ->setName('remarkup-assist-'.$icon)
         ->setTargetCSS($tcss);
 
       foreach ($scales as $scale_key => $scale) {
         $path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
         $sprite->setSourceFile($path, $scale);
       }
       $sprites[] = $sprite;
     }
 
     $sheet = $this->buildSheet('icons', true);
     $sheet->setScales($scales);
     foreach ($sprites as $sprite) {
       $sheet->addSprite($sprite);
     }
 
     return $sheet;
   }
 
   public function buildActionsSheet() {
     $icons = $this->getDirectoryList('actions_white_1x');
 
     $colors = array(
       'dark',
       'grey',
       'white',
     );
 
     $scales = array(
       '1x'  => 1,
       '2x'  => 2,
     );
 
     $template = id(new PhutilSprite())
       ->setSourceSize(24, 24);
 
     $sprites = array();
     foreach ($colors as $color) {
       foreach ($icons as $icon) {
         $prefix = 'actions_';
         if (strlen($color)) {
           $prefix .= $color.'_';
         }
 
         $suffix = '';
         if (strlen($color)) {
           $suffix = '-'.$color;
         }
 
         $sprite = id(clone $template)
           ->setName('actions-'.$icon.$suffix);
 
         $tcss = array();
         $tcss[] = '.actions-'.$icon.$suffix;
         if ($color == 'dark') {
           $tcss[] = '.device-desktop '.
             '.actions-'.$icon.'-grey.phui-icon-view:hover';
         }
 
         $sprite->setTargetCSS(implode(', ', $tcss));
 
         foreach ($scales as $scale_key => $scale) {
           $path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
           $sprite->setSourceFile($path, $scale);
         }
         $sprites[] = $sprite;
       }
     }
 
     $sheet = $this->buildSheet('actions', true);
     $sheet->setScales($scales);
     foreach ($sprites as $sprite) {
       $sheet->addSprite($sprite);
     }
 
     return $sheet;
   }
 
     public function buildMiniconsSheet() {
     $icons = $this->getDirectoryList('minicons_white_1x');
 
     $colors = array(
       'white',
       'dark',
     );
 
     $scales = array(
       '1x'  => 1,
       '2x'  => 2,
     );
 
     $template = id(new PhutilSprite())
       ->setSourceSize(16, 16);
 
     $sprites = array();
     foreach ($colors as $color) {
       foreach ($icons as $icon) {
         $prefix = 'minicons_';
         if (strlen($color)) {
           $prefix .= $color.'_';
         }
 
         $suffix = '';
         if (strlen($color)) {
           $suffix = '-'.$color;
         }
 
         $sprite = id(clone $template)
           ->setName('minicons-'.$icon.$suffix);
 
         $sprite->setTargetCSS('.minicons-'.$icon.$suffix);
 
         foreach ($scales as $scale_key => $scale) {
           $path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
           $sprite->setSourceFile($path, $scale);
         }
         $sprites[] = $sprite;
       }
     }
 
     $sheet = $this->buildSheet('minicons', true);
     $sheet->setScales($scales);
     foreach ($sprites as $sprite) {
       $sheet->addSprite($sprite);
     }
 
     return $sheet;
   }
 
 
   public function buildMenuSheet() {
     $sprites = array();
 
     $sources = array(
       'seen_read_all' => array(
         'x' => 18,
         'y' => 18,
         'css' =>
           '.alert-notifications .phabricator-main-menu-alert-icon',
       ),
       'seen_have_unread' => array(
         'x' => 18,
         'y' => 18,
         'css' =>
           '.alert-notifications:hover .phabricator-main-menu-alert-icon',
       ),
       'unseen_any' => array(
         'x' => 18,
         'y' => 18,
         'css' =>
           '.alert-notifications.alert-unread .phabricator-main-menu-alert-icon',
       ),
       'arrow-right' => array(
         'x' => 9,
         'y' => 31,
         'css' => '.phabricator-crumb-divider',
       ),
       'search' => array(
         'x' => 24,
         'y' => 24,
         'css' => '.menu-icon-search',
       ),
       'search_blue' => array(
         'x' => 24,
         'y' => 24,
         'css' => '.menu-icon-search-blue',
       ),
       'new' => array(
         'x' => 24,
         'y' => 24,
         'css' => '.menu-icon-new',
       ),
       'new_blue' => array(
         'x' => 24,
         'y' => 24,
         'css' => '.menu-icon-new-blue',
       ),
       'app' => array(
         'x' => 24,
         'y' => 24,
         'css' => '.menu-icon-app',
       ),
       'app_blue' => array(
         'x' => 24,
         'y' => 24,
         'css' => '.menu-icon-app-blue',
       ),
       'logo' => array(
         'x' => 149,
         'y' => 26,
         'css' => '.phabricator-main-menu-logo-image',
       ),
       'conf-off' => array(
         'x' => 18,
         'y' => 18,
         'css' =>
           '.alert-notifications .phabricator-main-menu-message-icon',
       ),
       'conf-hover' => array(
         'x' => 18,
         'y' => 18,
         'css' =>
           '.alert-notifications:hover .phabricator-main-menu-message-icon',
       ),
       'conf-unseen' => array(
         'x' => 18,
         'y' => 18,
         'css' =>
           '.alert-notifications.message-unread '.
           '.phabricator-main-menu-message-icon',
       ),
     );
 
     $scales = array(
       '1x' => 1,
       '2x' => 2,
     );
 
     $template = new PhutilSprite();
     foreach ($sources as $name => $spec) {
       $sprite = id(clone $template)
         ->setName($name)
         ->setSourceSize($spec['x'], $spec['y'])
         ->setTargetCSS($spec['css']);
 
       foreach ($scales as $scale_name => $scale) {
         $path = 'menu_'.$scale_name.'/'.$name.'.png';
         $path = $this->getPath($path);
 
         $sprite->setSourceFile($path, $scale);
       }
       $sprites[] = $sprite;
     }
 
     $sheet = $this->buildSheet('menu', true);
     $sheet->setScales($scales);
     foreach ($sprites as $sprite) {
       $sheet->addSprite($sprite);
     }
 
     return $sheet;
   }
 
   public function buildTokenSheet() {
     $tokens = $this->getDirectoryList('tokens_1x');
 
     $template = id(new PhutilSprite())
       ->setSourceSize(16, 16);
 
     $sprites = array();
     foreach ($tokens as $token) {
       $path = $this->getPath('tokens_1x/'.$token.'.png');
 
       $sprite = id(clone $template)
         ->setName('tokens-'.$token)
         ->setTargetCSS('.tokens-'.$token)
         ->setSourceFile($path, 1);
 
       $sprites[] = $sprite;
     }
 
     $sheet = $this->buildSheet('tokens', false);
     foreach ($sprites as $sprite) {
       $sheet->addSprite($sprite);
     }
 
     return $sheet;
   }
 
   public function buildPaymentsSheet() {
     $icons = $this->getDirectoryList('payments_2x');
     $scales = array(
       '2x' => 1,
     );
     $template = id(new PhutilSprite())
       ->setSourceSize(60, 32);
 
     $sprites = array();
     $prefix = 'payments_';
     foreach ($icons as $icon) {
       $sprite = id(clone $template)
         ->setName('payments-'.$icon)
         ->setTargetCSS('.payments-'.$icon);
 
       foreach ($scales as $scale_key => $scale) {
         $path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
         $sprite->setSourceFile($path, $scale);
       }
       $sprites[] = $sprite;
     }
 
     $sheet = $this->buildSheet('payments', true);
     $sheet->setScales($scales);
     foreach ($sprites as $sprite) {
       $sheet->addSprite($sprite);
     }
 
     return $sheet;
   }
 
 
   public function buildConpherenceSheet() {
     $name = 'conpherence';
     $icons = $this->getDirectoryList($name.'_1x');
     $scales = array(
       '1x' => 1,
       '2x' => 2,
     );
     $template = id(new PhutilSprite())
       ->setSourceSize(32, 32);
 
     $sprites = array();
     foreach ($icons as $icon) {
       $color = preg_match('/_on/', $icon) ? 'on' : 'off';
 
       $prefix = $name.'_';
 
       $sprite = id(clone $template)
         ->setName($prefix.$icon);
 
       $tcss = array();
       $tcss[] = '.'.$prefix.$icon;
       if ($color == 'on') {
         $class = str_replace('_on', '_off', $prefix.$icon);
         $tcss[] = '.device-desktop .'.$class.':hover ';
       }
 
       $sprite->setTargetCSS(implode(', ', $tcss));
 
       foreach ($scales as $scale_key => $scale) {
         $path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
         $sprite->setSourceFile($path, $scale);
       }
       $sprites[] = $sprite;
     }
 
     $sheet = $this->buildSheet($name, true);
     $sheet->setScales($scales);
     foreach ($sprites as $sprite) {
       $sheet->addSprite($sprite);
     }
 
     return $sheet;
   }
 
   public function buildDocsSheet() {
     $icons = $this->getDirectoryList('docs_1x');
     $scales = array(
       '1x' => 1,
       '2x' => 2,
     );
     $template = id(new PhutilSprite())
       ->setSourceSize(32, 32);
 
     $sprites = array();
     $prefix = 'docs_';
     foreach ($icons as $icon) {
       $sprite = id(clone $template)
         ->setName($prefix.$icon)
         ->setTargetCSS('.'.$prefix.$icon);
 
       foreach ($scales as $scale_key => $scale) {
         $path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
         $sprite->setSourceFile($path, $scale);
       }
       $sprites[] = $sprite;
     }
 
     $sheet = $this->buildSheet('docs', true);
     $sheet->setScales($scales);
     foreach ($sprites as $sprite) {
       $sheet->addSprite($sprite);
     }
 
     return $sheet;
   }
 
   public function buildLoginSheet() {
     $icons = $this->getDirectoryList('login_1x');
     $scales = array(
       '1x' => 1,
       '2x' => 2,
     );
     $template = id(new PhutilSprite())
       ->setSourceSize(34, 34);
 
     $sprites = array();
     $prefix = 'login_';
     foreach ($icons as $icon) {
       $sprite = id(clone $template)
         ->setName('login-'.$icon)
         ->setTargetCSS('.login-'.$icon);
 
       foreach ($scales as $scale_key => $scale) {
         $path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
         $sprite->setSourceFile($path, $scale);
       }
       $sprites[] = $sprite;
     }
 
     $sheet = $this->buildSheet('login', true);
     $sheet->setScales($scales);
     foreach ($sprites as $sprite) {
       $sheet->addSprite($sprite);
     }
 
     return $sheet;
   }
 
   public function buildStatusSheet() {
     $icons = $this->getDirectoryList('status_1x');
     $scales = array(
       '1x' => 1,
       '2x' => 2,
     );
     $template = id(new PhutilSprite())
       ->setSourceSize(14, 14);
 
     $sprites = array();
     $prefix = 'status_';
     foreach ($icons as $icon) {
       $sprite = id(clone $template)
         ->setName('status-'.$icon)
         ->setTargetCSS('.status-'.$icon);
 
       foreach ($scales as $scale_key => $scale) {
         $path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png');
         $sprite->setSourceFile($path, $scale);
       }
       $sprites[] = $sprite;
     }
 
     $sheet = $this->buildSheet('status', true);
     $sheet->setScales($scales);
     foreach ($sprites as $sprite) {
       $sheet->addSprite($sprite);
     }
 
     return $sheet;
   }
 
   public function buildGradientSheet() {
     $gradients = $this->getDirectoryList('gradients');
 
     $template = new PhutilSprite();
 
     $unusual_heights = array(
       'dark-menu-label' => 25,
       'breadcrumbs'     => 31,
       'menu-label'      => 24,
       'red-header'      => 70,
       'blue-header'     => 70,
       'green-header'    => 70,
       'yellow-header'   => 70,
       'grey-header'     => 70,
       'dark-grey-header' => 70,
+      'lightblue-header' => 70,
     );
 
     $extra_css = array(
       'dark-menu-label' =>
         ', .phabricator-dark-menu .phui-list-item-type-label',
       'menu-label' =>
         ', .phabricator-side-menu .phui-list-item-type-label',
     );
 
     $sprites = array();
     foreach ($gradients as $gradient) {
       $path = $this->getPath('gradients/'.$gradient.'.png');
       $sprite = id(clone $template)
         ->setName('gradient-'.$gradient)
         ->setSourceFile($path)
         ->setTargetCSS('.gradient-'.$gradient.idx($extra_css, $gradient));
 
       $sprite->setSourceSize(4, idx($unusual_heights, $gradient, 26));
 
       $sprites[] = $sprite;
     }
 
     $sheet = $this->buildSheet(
       'gradient',
       false,
       PhutilSpriteSheet::TYPE_REPEAT_X,
       ', .phabricator-dark-menu .phui-list-item-type-label, '.
       '.phabricator-side-menu .phui-list-item-type-label');
     foreach ($sprites as $sprite) {
       $sheet->addSprite($sprite);
     }
 
     return $sheet;
   }
 
   public function buildAppsSheet() {
     return $this->buildAppsSheetVariant(1);
   }
 
   public function buildAppsLargeSheet() {
     return $this->buildAppsSheetVariant(2);
   }
 
   public function buildAppsXLargeSheet() {
     return $this->buildAppsSheetVariant(3);
   }
 
   private function buildAppsSheetVariant($variant) {
 
     if ($variant == 1) {
       $scales = array(
         '1x' => 1,
         '2x' => 2,
       );
       $variant_name = 'apps';
       $variant_short = '';
       $size_x = 14;
       $size_y = 14;
 
       $colors = array(
         'dark'  => 'dark',
         'white' => 'white',
       );
     } else if ($variant == 2) {
       $scales = array(
         '2x' => 1,
         '4x' => 2,
       );
       $variant_name = 'apps-large';
       $variant_short = '-large';
       $size_x = 28;
       $size_y = 28;
 
       $colors = array(
         'light' => 'lb',
         'dark'  => 'dark',
         'blue'  => 'blue',
         'white' => 'white',
       );
     } else {
       $scales = array(
         '4x' => 1,
       );
       $variant_name = 'apps-xlarge';
       $variant_short = '-xlarge';
       $size_x = 56;
       $size_y = 56;
 
       $colors = array(
         'dark'  => 'dark',
         /*
 
         TODO: These are available but not currently used.
 
         'blue'  => 'blue',
         'light' => 'lb',
         */
       );
     }
 
 
     $apps = $this->getDirectoryList('apps_dark_1x');
 
     $template = id(new PhutilSprite())
       ->setSourceSize($size_x, $size_y);
 
     $sprites = array();
     foreach ($apps as $app) {
       foreach ($colors as $color => $color_path) {
 
         $css = '.apps-'.$app.'-'.$color.$variant_short;
         if ($color == 'blue' && $variant_name == 'apps-large') {
           $css .= ', .phabricator-crumb-view:hover .apps-'.$app.'-dark-large';
         }
 
         $sprite = id(clone $template)
           ->setName('apps-'.$app.'-'.$color.$variant_short)
           ->setTargetCSS($css);
 
         foreach ($scales as $scale_name => $scale) {
           $path = $this->getPath(
             'apps_'.$color_path.'_'.$scale_name.'/'.$app.'.png');
           $sprite->setSourceFile($path, $scale);
         }
 
         $sprites[] = $sprite;
       }
     }
 
     $sheet = $this->buildSheet($variant_name, count($scales) > 1);
     $sheet->setScales($scales);
     foreach ($sprites as $sprite) {
       $sheet->addSprite($sprite);
     }
 
     return $sheet;
   }
 
 
   private function getPath($to_path = null) {
     $root = dirname(phutil_get_library_root('phabricator'));
     return $root.'/resources/sprite/'.$to_path;
   }
 
   private function getDirectoryList($dir) {
     $path = $this->getPath($dir);
 
     $result = array();
 
     $images = Filesystem::listDirectory($path, $include_hidden = false);
     foreach ($images as $image) {
       if (!preg_match('/\.png$/', $image)) {
         throw new Exception(
           "Expected file '{$image}' in '{$path}' to be a sprite source ".
           "ending in '.png'.");
       }
       $result[] = substr($image, 0, -4);
     }
 
     return $result;
   }
 
   private function buildSheet(
     $name,
     $has_retina,
     $type = null,
     $extra_css = '') {
 
     $sheet = new PhutilSpriteSheet();
 
     $at = '@';
 
     switch ($type) {
       case PhutilSpriteSheet::TYPE_STANDARD:
       default:
         $type = PhutilSpriteSheet::TYPE_STANDARD;
         $repeat_rule = 'no-repeat';
         break;
       case PhutilSpriteSheet::TYPE_REPEAT_X:
         $repeat_rule = 'repeat-x';
         break;
       case PhutilSpriteSheet::TYPE_REPEAT_Y:
         $repeat_rule = 'repeat-y';
         break;
     }
 
     $retina_rules = null;
     if ($has_retina) {
       $retina_rules = <<<EOCSS
 @media
 only screen and (min-device-pixel-ratio: 1.5),
 only screen and (-webkit-min-device-pixel-ratio: 1.5) {
   .sprite-{$name}{$extra_css} {
     background-image: url(/rsrc/image/sprite-{$name}-X2.png);
     background-size: {X}px {Y}px;
   }
 }
 EOCSS;
     }
 
     $sheet->setSheetType($type);
     $sheet->setCSSHeader(<<<EOCSS
 /**
  * @provides sprite-{$name}-css
  * {$at}generated
  */
 
 .sprite-{$name}{$extra_css} {
   background-image: url(/rsrc/image/sprite-{$name}.png);
   background-repeat: {$repeat_rule};
 }
 
 {$retina_rules}
 
 EOCSS
 );
 
     return $sheet;
   }
 }
 
 
diff --git a/src/view/AphrontDialogView.php b/src/view/AphrontDialogView.php
index 6c3d4372d..1a590c4b6 100644
--- a/src/view/AphrontDialogView.php
+++ b/src/view/AphrontDialogView.php
@@ -1,253 +1,253 @@
 <?php
 
 final class AphrontDialogView extends AphrontView {
 
   private $title;
   private $submitButton;
   private $cancelURI;
   private $cancelText = 'Cancel';
   private $submitURI;
   private $hidden = array();
   private $class;
   private $renderAsForm = true;
   private $formID;
-  private $headerColor = PhabricatorActionHeaderView::HEADER_DARK_GREY;
+  private $headerColor = PhabricatorActionHeaderView::HEADER_LIGHTBLUE;
   private $footers = array();
   private $isStandalone;
   private $method = 'POST';
 
 
   public function setMethod($method) {
     $this->method = $method;
     return $this;
   }
 
   public function setIsStandalone($is_standalone) {
     $this->isStandalone = $is_standalone;
     return $this;
   }
 
   public function getIsStandalone() {
     return $this->isStandalone;
   }
 
   private $width      = 'default';
   const WIDTH_DEFAULT = 'default';
   const WIDTH_FORM    = 'form';
   const WIDTH_FULL    = 'full';
 
   public function setSubmitURI($uri) {
     $this->submitURI = $uri;
     return $this;
   }
 
   public function setTitle($title) {
     $this->title = $title;
     return $this;
   }
 
   public function getTitle() {
     return $this->title;
   }
 
   public function addSubmitButton($text = null) {
     if (!$text) {
       $text = pht('Okay');
     }
 
     $this->submitButton = $text;
     return $this;
   }
 
   public function addCancelButton($uri, $text = null) {
     if (!$text) {
       $text = pht('Cancel');
     }
 
     $this->cancelURI = $uri;
     $this->cancelText = $text;
     return $this;
   }
 
   public function addFooter($footer) {
     $this->footers[] = $footer;
     return $this;
   }
 
   public function addHiddenInput($key, $value) {
     if (is_array($value)) {
       foreach ($value as $hidden_key => $hidden_value) {
         $this->hidden[] = array($key.'['.$hidden_key.']', $hidden_value);
       }
     } else {
       $this->hidden[] = array($key, $value);
     }
     return $this;
   }
 
   public function setClass($class) {
     $this->class = $class;
     return $this;
   }
 
   public function setRenderDialogAsDiv() {
     // TODO: This API is awkward.
     $this->renderAsForm = false;
     return $this;
   }
 
   public function setFormID($id) {
     $this->formID = $id;
     return $this;
   }
 
   public function setWidth($width) {
     $this->width = $width;
     return $this;
   }
 
   public function setHeaderColor($color) {
     $this->headerColor = $color;
     return $this;
   }
 
   final public function render() {
     require_celerity_resource('aphront-dialog-view-css');
 
     $buttons = array();
     if ($this->submitButton) {
       $buttons[] = javelin_tag(
         'button',
         array(
           'name' => '__submit__',
           'sigil' => '__default__',
         ),
         $this->submitButton);
     }
 
     if ($this->cancelURI) {
       $buttons[] = javelin_tag(
         'a',
         array(
           'href'  => $this->cancelURI,
           'class' => 'button grey',
           'name'  => '__cancel__',
           'sigil' => 'jx-workflow-button',
         ),
         $this->cancelText);
     }
 
     if (!$this->user) {
       throw new Exception(
         pht("You must call setUser() when rendering an AphrontDialogView."));
     }
 
     $more = $this->class;
 
     switch ($this->width) {
       case self::WIDTH_FORM:
       case self::WIDTH_FULL:
         $more .= ' aphront-dialog-view-width-'.$this->width;
         break;
       case self::WIDTH_DEFAULT:
         break;
       default:
         throw new Exception("Unknown dialog width '{$this->width}'!");
     }
 
     if ($this->isStandalone) {
       $more .= ' aphront-dialog-view-standalone';
     }
 
     $attributes = array(
       'class'   => 'aphront-dialog-view '.$more,
       'sigil'   => 'jx-dialog',
     );
 
     $form_attributes = array(
       'action'  => $this->submitURI,
       'method'  => $this->method,
       'id'      => $this->formID,
     );
 
     $hidden_inputs = array();
     $hidden_inputs[] = phutil_tag(
       'input',
       array(
         'type' => 'hidden',
         'name' => '__dialog__',
         'value' => '1',
       ));
 
     foreach ($this->hidden as $desc) {
       list($key, $value) = $desc;
       $hidden_inputs[] = javelin_tag(
         'input',
         array(
           'type' => 'hidden',
           'name' => $key,
           'value' => $value,
           'sigil' => 'aphront-dialog-application-input'
         ));
     }
 
     if (!$this->renderAsForm) {
       $buttons = array(phabricator_form(
         $this->user,
         $form_attributes,
         array_merge($hidden_inputs, $buttons)));
     }
 
     $children = $this->renderChildren();
 
     $header = new PhabricatorActionHeaderView();
     $header->setHeaderTitle($this->title);
     $header->setHeaderColor($this->headerColor);
 
     $footer = null;
     if ($this->footers) {
       $footer = phutil_tag(
         'div',
         array(
           'class' => 'aphront-dialog-foot',
         ),
         $this->footers);
     }
 
     $content = array(
       phutil_tag(
         'div',
         array(
           'class' => 'aphront-dialog-head',
         ),
         $header),
       phutil_tag('div',
         array(
           'class' => 'aphront-dialog-body grouped',
         ),
         $children),
       phutil_tag(
         'div',
         array(
           'class' => 'aphront-dialog-tail grouped',
         ),
         array(
           $buttons,
           $footer,
         )),
     );
 
     if ($this->renderAsForm) {
       return phabricator_form(
         $this->user,
         $form_attributes + $attributes,
         array($hidden_inputs, $content));
     } else {
       return javelin_tag(
         'div',
         $attributes,
         $content);
     }
   }
 
 }
diff --git a/src/view/form/AphrontFormLayoutView.php b/src/view/form/AphrontFormLayoutView.php
deleted file mode 100644
index 5cc4d1b0a..000000000
--- a/src/view/form/AphrontFormLayoutView.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-/**
- * This provides the layout of an AphrontFormView without actually providing
- * the <form /> tag. Useful on its own for creating forms in other forms (like
- * dialogs) or forms which aren't submittable.
- */
-final class AphrontFormLayoutView extends AphrontView {
-
-  private $backgroundShading;
-  private $padded;
-  private $fullWidth;
-
-  public function setBackgroundShading($shading) {
-    $this->backgroundShading = $shading;
-    return $this;
-  }
-
-  public function setPadded($padded) {
-    $this->padded = $padded;
-    return $this;
-  }
-
-  public function setFullWidth($width) {
-    $this->fullWidth = $width;
-    return $this;
-  }
-
-  public function render() {
-    $classes = array('aphront-form-view');
-
-    if ($this->backgroundShading) {
-      $classes[] = 'aphront-form-view-shaded';
-    }
-
-    if ($this->padded) {
-      $classes[] = 'aphront-form-view-padded';
-    }
-
-    if ($this->fullWidth) {
-      $classes[] = 'aphront-form-full-width';
-    }
-
-    $classes = implode(' ', $classes);
-
-    return phutil_tag(
-      'div',
-      array(
-        'class' => $classes,
-      ),
-      $this->renderChildren());
-  }
-}
diff --git a/src/view/form/AphrontFormView.php b/src/view/form/AphrontFormView.php
index 25c872671..4dbd0f4cf 100644
--- a/src/view/form/AphrontFormView.php
+++ b/src/view/form/AphrontFormView.php
@@ -1,148 +1,131 @@
 <?php
 
 final class AphrontFormView extends AphrontView {
 
   private $action;
   private $method = 'POST';
   private $header;
   private $data = array();
   private $encType;
   private $workflow;
   private $id;
-  private $flexible;
-  private $noShading;
+  private $shaded = false;
   private $sigils = array();
   private $metadata;
 
 
   public function setMetadata($metadata) {
     $this->metadata = $metadata;
     return $this;
   }
 
   public function getMetadata() {
     return $this->metadata;
   }
 
-  public function setFlexible($flexible) {
-    $this->flexible = $flexible;
-    return $this;
-  }
-
-  public function setNoShading($shading) {
-    $this->noShading = $shading;
-    return $this;
-  }
-
   public function setID($id) {
     $this->id = $id;
     return $this;
   }
 
   public function setAction($action) {
     $this->action = $action;
     return $this;
   }
 
   public function setMethod($method) {
     $this->method = $method;
     return $this;
   }
 
   public function setEncType($enc_type) {
     $this->encType = $enc_type;
     return $this;
   }
 
+  public function setShaded($shaded) {
+    $this->shaded = $shaded;
+    return $this;
+  }
+
   public function addHiddenInput($key, $value) {
     $this->data[$key] = $value;
     return $this;
   }
 
   public function setWorkflow($workflow) {
     $this->workflow = $workflow;
     return $this;
   }
 
   public function addSigil($sigil) {
     $this->sigils[] = $sigil;
     return $this;
   }
 
   public function appendInstructions($text) {
     return $this->appendChild(
       phutil_tag(
         'div',
         array(
           'class' => 'aphront-form-instructions',
         ),
         $text));
   }
 
   public function appendRemarkupInstructions($remarkup) {
     return $this->appendInstructions(
       PhabricatorMarkupEngine::renderOneObject(
         id(new PhabricatorMarkupOneOff())->setContent($remarkup),
         'default',
         $this->getUser()));
   }
 
   public function render() {
-    if ($this->flexible) {
-      require_celerity_resource('phabricator-form-view-css');
-    }
-    require_celerity_resource('aphront-form-view-css');
-
-    $layout = new AphrontFormLayoutView();
-
-    if ((!$this->flexible) && (!$this->noShading)) {
-      $layout
-        ->setBackgroundShading(true)
-        ->setPadded(true);
-    }
 
-    $layout
+    require_celerity_resource('phui-form-view-css');
+    $layout = id (new PHUIFormLayoutView())
       ->appendChild($this->renderDataInputs())
       ->appendChild($this->renderChildren());
 
     if (!$this->user) {
       throw new Exception(pht('You must pass the user to AphrontFormView.'));
     }
 
     $sigils = $this->sigils;
     if ($this->workflow) {
       $sigils[] = 'workflow';
     }
 
     return phabricator_form(
       $this->user,
       array(
-        'class'   => $this->flexible ? 'phabricator-form-view' : null,
+        'class'   => $this->shaded ? 'phui-form-shaded' : null,
         'action'  => $this->action,
         'method'  => $this->method,
         'enctype' => $this->encType,
         'sigil'   => $sigils ? implode(' ', $sigils) : null,
         'meta'    => $this->metadata,
         'id'      => $this->id,
       ),
       $layout->render());
   }
 
   private function renderDataInputs() {
     $inputs = array();
     foreach ($this->data as $key => $value) {
       if ($value === null) {
         continue;
       }
       $inputs[] = phutil_tag(
         'input',
         array(
           'type'  => 'hidden',
           'name'  => $key,
           'value' => $value,
         ));
     }
     return $inputs;
   }
 
 }
diff --git a/src/view/form/PHUIFormBoxView.php b/src/view/form/PHUIFormBoxView.php
new file mode 100644
index 000000000..60f489448
--- /dev/null
+++ b/src/view/form/PHUIFormBoxView.php
@@ -0,0 +1,43 @@
+<?php
+
+final class PHUIFormBoxView extends AphrontView {
+
+  private $headerText;
+  private $formError = null;
+  private $form;
+
+  public function setHeaderText($text) {
+    $this->headerText = $text;
+    return $this;
+  }
+
+  public function setFormError($error) {
+    $this->formError = $error;
+    return $this;
+  }
+
+  public function setForm(AphrontFormView $form) {
+    $this->form = $form;
+    return $this;
+  }
+
+  public function render() {
+
+    $error = $this->formError ? $this->formError : null;
+
+    $header = id(new PhabricatorActionHeaderView())
+      ->setHeaderTitle($this->headerText)
+      ->setHeaderColor(PhabricatorActionHeaderView::HEADER_LIGHTBLUE);
+
+    $content = id(new PHUIBoxView())
+      ->appendChild(array($header, $error, $this->form))
+      ->setBorder(true)
+      ->addMargin(PHUI::MARGIN_LARGE_TOP)
+      ->addMargin(PHUI::MARGIN_LARGE_LEFT)
+      ->addMargin(PHUI::MARGIN_LARGE_RIGHT)
+      ->addClass('phui-form-box');
+
+    return $content;
+
+  }
+}
diff --git a/src/view/form/PHUIFormLayoutView.php b/src/view/form/PHUIFormLayoutView.php
new file mode 100644
index 000000000..15347b12f
--- /dev/null
+++ b/src/view/form/PHUIFormLayoutView.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * This provides the layout of an AphrontFormView without actually providing
+ * the <form /> tag. Useful on its own for creating forms in other forms (like
+ * dialogs) or forms which aren't submittable.
+ */
+final class PHUIFormLayoutView extends AphrontView {
+
+  private $fullWidth;
+
+  public function setFullWidth($width) {
+    $this->fullWidth = $width;
+    return $this;
+  }
+
+  public function render() {
+    $classes = array('phui-form-view');
+
+    if ($this->fullWidth) {
+      $classes[] = 'phui-form-full-width';
+    }
+
+    return phutil_tag(
+      'div',
+      array(
+        'class' => implode(' ', $classes),
+      ),
+      $this->renderChildren());
+
+  }
+}
diff --git a/src/view/layout/PhabricatorActionHeaderView.php b/src/view/layout/PhabricatorActionHeaderView.php
index 84db5b1c7..4ce655df4 100644
--- a/src/view/layout/PhabricatorActionHeaderView.php
+++ b/src/view/layout/PhabricatorActionHeaderView.php
@@ -1,148 +1,149 @@
 <?php
 
 final class PhabricatorActionHeaderView extends AphrontView {
 
   const ICON_GREY = 'grey';
   const ICON_WHITE = 'white';
 
   const HEADER_GREY = 'grey';
   const HEADER_DARK_GREY = 'dark-grey';
   const HEADER_BLUE = 'blue';
   const HEADER_GREEN = 'green';
   const HEADER_RED = 'red';
   const HEADER_YELLOW = 'yellow';
+  const HEADER_LIGHTBLUE ='lightblue';
 
   private $headerTitle;
   private $headerHref;
   private $headerIcon;
   private $headerSigils = array();
   private $actions = array();
   private $iconColor = PhabricatorActionHeaderView::ICON_GREY;
   private $headerColor;
   private $dropdown;
 
   public function setDropdown($dropdown) {
     $this->dropdown = $dropdown;
     return $this;
   }
 
   public function addAction(PHUIIconView $action) {
     $this->actions[] = $action;
     return $this;
   }
 
   public function setTag(PhabricatorTagView $tag) {
     $this->actions[] = $tag;
     return $this;
   }
 
   public function setHeaderTitle($header) {
     $this->headerTitle = $header;
     return $this;
   }
 
   public function setHeaderHref($href) {
     $this->headerHref = $href;
     return $this;
   }
 
   public function addHeaderSigil($sigil) {
     $this->headerSigils[] = $sigil;
     return $this;
   }
 
   public function setHeaderIcon($minicon) {
     $this->headerIcon = $minicon;
     return $this;
   }
 
   public function setIconColor($color) {
     $this->iconColor = $color;
     return $this;
   }
 
   public function setHeaderColor($color) {
     $this->headerColor = $color;
     return $this;
   }
 
   public function render() {
 
     require_celerity_resource('phabricator-action-header-view-css');
 
     $classes = array();
     $classes[] = 'phabricator-action-header';
 
     if ($this->headerColor) {
       $classes[] = 'sprite-gradient';
       $classes[] = 'gradient-'.$this->headerColor.'-header';
     }
 
     if ($this->dropdown) {
       $classes[] = 'dropdown';
     }
 
     $action_list = array();
     foreach ($this->actions as $action) {
       $action_list[] = phutil_tag(
         'li',
           array(
           'class' => 'phabricator-action-header-icon-item'
         ),
         $action);
     }
 
     $header_icon = '';
     if ($this->headerIcon) {
       require_celerity_resource('sprite-minicons-css');
       $header_icon = phutil_tag(
         'span',
           array(
             'class' => 'sprite-minicons minicons-'.$this->headerIcon
           ),
           '');
     }
 
     $header_title = $this->headerTitle;
     if ($this->headerHref) {
       $header_title = javelin_tag(
         'a',
           array(
             'class' => 'phabricator-action-header-link',
             'href' => $this->headerHref,
             'sigil' => implode(' ', $this->headerSigils)
           ),
           $this->headerTitle);
     }
 
     $header = phutil_tag(
       'h3',
         array(
           'class' => 'phabricator-action-header-title'
         ),
       array(
         $header_icon,
         $header_title));
 
     $icons = '';
     if (!empty($action_list)) {
       $classes[] = 'phabricator-action-header-icon-'.$this->iconColor;
       $icons = phutil_tag(
         'ul',
           array(
             'class' => 'phabricator-action-header-icon-list'
           ),
           $action_list);
     }
 
     return phutil_tag(
       'div',
         array(
           'class' => implode(' ', $classes)
         ),
         array(
           $header,
           $icons
         ));
   }
 }
diff --git a/src/view/phui/PHUIBoxView.php b/src/view/phui/PHUIBoxView.php
index 6dbf90f34..cc0771a16 100644
--- a/src/view/phui/PHUIBoxView.php
+++ b/src/view/phui/PHUIBoxView.php
@@ -1,57 +1,66 @@
 <?php
 
 final class PHUIBoxView extends AphrontTagView {
 
   private $margin = array();
   private $padding = array();
   private $shadow = false;
+  private $border = false;
 
   public function addMargin($margin) {
     $this->margin[] = $margin;
     return $this;
   }
 
   public function addPadding($padding) {
     $this->padding[] = $padding;
     return $this;
   }
 
   public function setShadow($shadow) {
     $this->shadow = $shadow;
     return $this;
   }
 
+  public function setBorder($border) {
+    $this->border = $border;
+    return $this;
+  }
+
   public function getTagContent() {
 
     require_celerity_resource('phui-box-css');
 
     $outer_classes = array();
     $outer_classes[] = 'phui-box';
     if ($this->shadow) {
       $outer_classes[] = 'phui-box-shadow';
     }
+    if ($this->border) {
+      $outer_classes[] = 'phui-box-border';
+    }
     foreach ($this->margin as $margin) {
       $outer_classes[] = $margin;
     }
 
     $inner_classes = array();
     $inner_classes[] = 'phui-box-inner';
     foreach ($this->padding as $padding) {
       $inner_classes[] = $padding;
     }
 
     $inner = phutil_tag(
       'div',
         array(
           'class' => implode(' ', $inner_classes)
         ),
         $this->renderChildren());
 
     return phutil_tag(
       'div',
         array(
           'class' => implode(' ', $outer_classes)
         ),
         $inner);
   }
 }
diff --git a/src/view/phui/PHUIRemarkupPreviewPanel.php b/src/view/phui/PHUIRemarkupPreviewPanel.php
index fa528a3c1..0a98f1dec 100644
--- a/src/view/phui/PHUIRemarkupPreviewPanel.php
+++ b/src/view/phui/PHUIRemarkupPreviewPanel.php
@@ -1,127 +1,134 @@
 <?php
 
 /**
  * Render a simple preview panel for a bound Remarkup text control.
  */
 final class PHUIRemarkupPreviewPanel extends AphrontTagView {
 
   private $header;
   private $loadingText;
   private $controlID;
   private $previewURI;
   private $skin = 'default';
 
   protected function canAppendChild() {
     return false;
   }
 
   public function setPreviewURI($preview_uri) {
     $this->previewURI = $preview_uri;
     return $this;
   }
 
   public function setControlID($control_id) {
     $this->controlID = $control_id;
     return $this;
   }
 
   public function setHeader($header) {
     $this->header = $header;
     return $this;
   }
 
   public function setLoadingText($loading_text) {
     $this->loadingText = $loading_text;
     return $this;
   }
 
   public function setSkin($skin) {
     static $skins = array(
       'default' => true,
       'document' => true,
     );
 
     if (empty($skins[$skin])) {
       $valid = implode(', ', array_keys($skins));
       throw new Exception("Invalid skin '{$skin}'. Valid skins are: {$valid}.");
     }
 
     $this->skin = $skin;
     return $this;
   }
 
   public function getTagName() {
     return 'div';
   }
 
   public function getTagAttributes() {
     $classes = array();
     $classes[] = 'phui-remarkup-preview';
 
     if ($this->skin) {
       $classes[] = 'phui-remarkup-preview-skin-'.$this->skin;
     }
 
     return array(
       'class' => $classes,
     );
   }
 
   protected function getTagContent() {
     if ($this->previewURI === null) {
       throw new Exception("Call setPreviewURI() before rendering!");
     }
     if ($this->controlID === null) {
       throw new Exception("Call setControlID() before rendering!");
     }
 
     $preview_id = celerity_generate_unique_node_id();
 
     require_celerity_resource('phui-remarkup-preview-css');
     Javelin::initBehavior(
       'remarkup-preview',
       array(
         'previewID' => $preview_id,
         'controlID' => $this->controlID,
         'uri' => $this->previewURI,
       ));
 
     $loading = phutil_tag(
       'div',
       array(
         'class' => 'phui-preview-loading-text',
       ),
       nonempty($this->loadingText, pht('Loading preview...')));
 
     $header = null;
     if ($this->header) {
       $header = phutil_tag(
         'div',
         array(
           'class' => 'phui-preview-header',
         ),
         $this->header);
     }
 
     $preview = phutil_tag(
       'div',
       array(
         'id' => $preview_id,
         'class' => 'phabricator-remarkup',
       ),
       $loading);
 
     $content = array($header, $preview);
 
     switch ($this->skin) {
       case 'document':
-        $content = id(new PHUIDocumentView())->appendChild($content);
+        $content = id(new PHUIDocumentView())
+          ->appendChild($content);
         break;
       default:
+        $content = id(new PHUIBoxView())
+          ->appendChild($content)
+          ->setBorder(true)
+          ->addMargin(PHUI::MARGIN_LARGE)
+          ->addPadding(PHUI::PADDING_LARGE)
+          ->addClass('phui-panel-preview');
         break;
     }
 
     return $content;
   }
 
 }
diff --git a/webroot/rsrc/css/aphront/dialog-view.css b/webroot/rsrc/css/aphront/dialog-view.css
index 42ccabc64..4d2daba8b 100644
--- a/webroot/rsrc/css/aphront/dialog-view.css
+++ b/webroot/rsrc/css/aphront/dialog-view.css
@@ -1,120 +1,113 @@
 /**
  * @provides aphront-dialog-view-css
  */
 
 .aphront-dialog-view {
   width: 540px;
   margin: 32px auto 16px;
-  border-radius: 6px;
+    border: 1px solid #bfcfda;
+  border-bottom: 1px solid #95a6c5;
   box-shadow: 0 1px 5px rgba(0, 0, 0, 0.25),
               inset 0 1px 0 rgba(255, 255, 255, 0.5);
 }
 
 .device-phone .aphront-dialog-view {
   margin: 16px;
   width: auto;
 }
 
-/* The "standalone" dialog (which is delivered over Ajax and appears above
-   an existing page) has a more pronounced shadow than dialogs do when they
-   are embedded in a page. */
 .aphront-dialog-view-standalone {
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4),
-              inset 0 1px 0 rgba(255, 255, 255, 0.5);
   margin: auto;
 }
 
-
 .aphront-dialog-head .phabricator-action-header {
   border-bottom: 1px solid #d4dadf;
   padding: 4px 16px;
   white-space: nowrap;
-  border-top-left-radius: 6px;
-  border-top-right-radius: 6px;
 }
 
 .aphront-dialog-head .phabricator-action-header
   .phabricator-action-header-title {
   font-size: 15px;
+  color: #6b748c;
+  text-shadow: 0 1px 2px #fff;
 }
 
 .aphront-dialog-view-width-form {
   width: 600px;
 }
 
 .aphront-dialog-view-width-full {
   width: 90%;
 }
 
 .aphront-dialog-body {
   background: #ffffff;
   padding: 16px;
   border: none;
 }
 
 .aphront-dialog-tail {
   border: none;
-  background: #fff;
+  background: #f7f7f7;
   padding: 8px 16px;
   border-top: 1px solid #d4dadf;
-  border-bottom-left-radius: 6px;
-  border-bottom-right-radius: 6px;
 }
 
 .aphront-dialog-foot {
   padding: 6px 0;
   float: left;
 }
 
 .aphront-dialog-tail button,
 .aphront-dialog-tail a.button {
   float: right;
-  margin-left: .5em;
+  margin-left: 8px;
 }
 
 .jx-client-dialog {
   position:   absolute;
   width:      100%;
 }
 
 .jx-mask {
-  opacity:    .37;
-  background: #222;
-  position:   fixed;
-  top:        0;
-  left:       0;
-  right:      0;
-  bottom:     0;
+  opacity: .75;
+  background: #fff;
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
 }
 
 .jx-dark-mask {
   background: #000000;
   opacity:    0.9;
 }
 
 .aphront-exception-dialog {
   width: 95%;
 }
 
 .aphront-exception-dialog .exception-message {
   font-size: 14px;
   background: #efefef;
   padding: 1em;
   white-space: pre-wrap;
 }
 
 .aphront-exception-dialog .exception-trace {
   margin-top: 15px;
 }
 
 .aphront-exception-dialog .exception-trace-header {
   font-size: 11px;
   color: #666666;
   border-bottom: 1px solid #aaaaaa;
   padding-bottom: .5em;
   margin-bottom: .5em;
 }
 
 .aphront-access-dialog {
   width: 50%;
 }
diff --git a/webroot/rsrc/css/aphront/error-view.css b/webroot/rsrc/css/aphront/error-view.css
index df6f9fa93..90d266bc9 100644
--- a/webroot/rsrc/css/aphront/error-view.css
+++ b/webroot/rsrc/css/aphront/error-view.css
@@ -1,81 +1,75 @@
 /**
  * @provides aphront-error-view-css
  */
 
 .aphront-error-view,
 .aphront-error-view-dialogue {
   border-style: solid;
   border-width: 1px;
 }
 
 form.aphront-dialog-view .aphront-error-view {
   margin: 8px 0;
 }
 
 .aphront-error-view {
-  margin: 20px;
+  margin: 16px;
 }
 .aphront-error-view-dialogue {
   margin: 0px 0px 16px 0px;
 }
 
 .device-phone .aphront-error-view {
-  margin: 10px;
+  margin: 8px;
 }
 
 .aphront-error-view-body {
-  padding: 10px;
-  line-height: 1.6em;
+  padding: 12px;
 }
 
 .aphront-error-view-head {
   padding: 10px 10px 0 10px;
   font-weight: bold;
   color: #333333;
 }
 
 .aphront-error-view-list {
-  margin: 0 0 0 20px;
+  margin: 0 0 0 16px;
   list-style: disc;
 }
 
 .aphront-error-severity-error {
   color: {$red};
   border-color: {$red};
   background: {$lightred};
 }
 
 .aphront-error-severity-error .aphront-error-view-head {
   color: {$red};
 }
 
 .aphront-error-severity-warning {
   color: #bc7837;
   border-color: {$yellow};
   background: {$lightyellow};
 }
 
 .aphront-error-severity-warning .aphront-error-view-head {
   color: #bc7837;
 }
 
 .aphront-error-severity-notice {
   color: {$blue};
   border-color: {$blue};
   background: {$lightblue};
 }
 
 .aphront-error-severity-notice .aphront-error-view-head {
   color: {$blue};
 }
 
 .aphront-error-severity-nodata {
-  border-color: #dfdfdf;
-  background: #f3f3f3;
-  color: #666;
-}
-
-.make-me-sneeze .aphront-error-severity-nodata {
-  background: #fff;
-  border-color: #e6e6e6;
+  border-color: #ccc;
+  color: #6b748c;
+  background-color: #fff;
 }
diff --git a/webroot/rsrc/css/aphront/list-filter-view.css b/webroot/rsrc/css/aphront/list-filter-view.css
index 44cd39742..cf46cd4e0 100644
--- a/webroot/rsrc/css/aphront/list-filter-view.css
+++ b/webroot/rsrc/css/aphront/list-filter-view.css
@@ -1,86 +1,86 @@
 /**
  * @provides aphront-list-filter-view-css
  */
 
 .aphront-list-filter-wrap {
   border-left: 1px solid #e7e7e7;
   border-right: 1px solid #e7e7e7;
   border-bottom: 1px solid #c0c5d1;
   margin: 0 20px;
 }
 
 .aphront-list-filter-view {
   background: #fff;
 
   padding: 0;
   box-shadow: 0 1px 2px rgba(0,0,0,0.2);
 }
 
 .device-phone .aphront-list-filter-wrap {
   margin: 0 -2px;
 }
 
-.aphront-list-filter-view-content .aphront-form-view {
+.aphront-list-filter-view-content .phui-form-view {
   border-left: none;
   border-right: none;
   padding: 12px 0 6px;
 }
 
-.aphront-list-filter-view-content .aphront-form-view .aphront-form-label {
+.aphront-list-filter-view-content .phui-form-view .aphront-form-label {
   width: 12%;
 }
 
-.aphront-list-filter-view-content .aphront-form-view .aphront-form-input {
+.aphront-list-filter-view-content .phui-form-view .aphront-form-input {
   width: 70%;
   margin-left: 13%;
   margin-right: 17%;
 }
 
-.device-phone .aphront-list-filter-view-content .aphront-form-view
+.device-phone .aphront-list-filter-view-content .phui-form-view
   .aphront-form-input {
   width: 98%;
   margin-left: 0;
   margin-right: 0;
 }
 
 .aphront-list-filter-view-collapsible .aphront-list-filter-view-content {
   border-top: 1px solid #e7e7e7;
 }
 
 .aphront-list-filter-reveal {
   margin-left: 13%;
   margin-right: 18%;
   padding: 8px 0;
   overflow: hidden;
   text-align: center;
 }
 
 .device .aphront-list-filter-reveal {
   width: 98%;
   margin: auto;
   padding: 8px;
 }
 
 .aphront-list-filter-reveal a {
   font-weight: bold;
   float: right;
 }
 
 .device .aphront-list-filter-reveal a {
   margin: 4px 0;
   float: left;
 }
 
 .aphront-list-filter-description {
   margin-right: 25%;
   float: left;
   text-align: left;
   line-height: 25px;
   color: #666666;
 }
 
 .device .aphront-list-filter-description {
   float: none;
   text-align: left;
   margin-right: 0;
 }
diff --git a/webroot/rsrc/css/aphront/panel-view.css b/webroot/rsrc/css/aphront/panel-view.css
index a5bd4d39e..776f91416 100644
--- a/webroot/rsrc/css/aphront/panel-view.css
+++ b/webroot/rsrc/css/aphront/panel-view.css
@@ -1,126 +1,126 @@
 /**
  * @provides aphront-panel-view-css
  */
 
 
 .aphront-panel-view {
   background: #f3f3f3;
   border: 1px solid #c0c0c0;
   border-width: 1px 0 0;
   padding: 1em 2em;
   margin: 20px 20px 40px 20px;
 }
 
 .device-phone .aphront-panel-view {
   margin: 20px 10px 40px 10px;
 }
 
 .aphront-unpadded-panel-view {
   padding: 0;
 }
 
 .aphront-panel-view.aphront-panel-plain {
   padding: 0;
   border: none;
   background: transparent;
 }
 
 .aphront-panel-view .aphront-panel-header {
   margin: 0 0 8px 0;
 }
 
 .aphront-panel-view h1 {
   font-size: 16px;
   font-weight: bold;
   color: #555;
   text-shadow: 0 1px 1px #fff;
   padding: 4px 0 0 0;
 }
 
 .aphront-panel-plain h1 {
   padding: 0 0 4px 0;
 }
 
 .aphront-panel-view-caption {
   font-size: 11px;
   color: #666666;
   margin-top: -0.1em;
   margin-bottom: 0.75em;
 }
 
 .aphront-panel-view-buttons {
   float: right;
 }
 
 .device-desktop .aphront-panel-width-form {
   width: 720px;
   margin-right: auto;
   margin-left: auto;
 }
 
 .device-desktop .aphront-panel-width-wide {
   width: 1080px;
   margin-right: auto;
   margin-left: auto;
 }
 
 .aphront-panel-accent {
   background: #f1f1f1;
   border: 1px solid #ddd;
   border-radius: 3px;
 }
 
-.aphront-panel-accent .aphront-form-view {
+.aphront-panel-accent .phui-form-view {
   background: #f7f7f7;
   border: 1px solid #c4c4c0;
   border-radius: 3px;
 }
 
 .aphront-panel-preview {
   background: #fbfbfb;
   border-bottom: 1px solid #aaaaaa;
   padding: 15px 20px;
 }
 
 .device-phone .aphront-panel-preview {
   display: none;
 }
 
 .aphront-panel-preview-wide {
   width: 1080px;
   margin-left: auto;
   margin-right: auto;
   padding-left: 2em;
   padding-right: 2em;
 }
 
 .aphront-panel-preview-loading-text {
   color: #666666;
 }
 
 .aphront-panel-flush {
   margin: 0;
 }
 
 .aphront-panel-view-drag-and-drop {
   background: #99ff99;
   border-color: #669966;
 }
 
-.aphront-panel-view-drag-and-drop .aphront-form-view {
+.aphront-panel-view-drag-and-drop .phui-form-view {
   background: #ccffcc;
   border-color: #669966;
 }
 
 .aphront-mini-panel-view {
   background: #fff;
   padding: 10px;
   margin: 5px 20px;
   border: 1px solid #e6e6e6;
 }
 
 .aphront-mini-panel-view p {
   font-size: 12px;
   color: #666666;
 }
 
diff --git a/webroot/rsrc/css/application/conpherence/message-pane.css b/webroot/rsrc/css/application/conpherence/message-pane.css
index 757d315f7..89e0c8a3b 100644
--- a/webroot/rsrc/css/application/conpherence/message-pane.css
+++ b/webroot/rsrc/css/application/conpherence/message-pane.css
@@ -1,224 +1,224 @@
 /**
  * @provides conpherence-message-pane-css
  */
 
 .conpherence-message-pane,
 .loading .messages-loading-mask,
 .loading .messages-loading-icon,
 .conpherence-layout .conpherence-no-threads {
   position: fixed;
   left: 280px;
   right: 241px;
   top: 76px;
   bottom: 0px;
   min-width: 300px;
   width: auto;
 }
 
 .device .conpherence-message-pane,
 .device .loading .messages-loading-mask,
 .device .loading .messages-loading-icon,
 .device .conpherence-layout .conpherence-no-threads {
   left: 0;
   right: 0;
   width: 100%;
 }
 
 .conpherence-layout .conpherence-no-threads {
   text-align: center;
 }
 
 .conpherence-layout .conpherence-no-threads .text {
   margin: 16px 0px 16px 0px;
 }
 
 .conpherence-show-older-messages {
   display: block;
   background: #e0e3ec;
   margin: 10px;
   text-align: center;
   padding: 10px;
   color: #18559D;
 }
 
 .conpherence-show-older-messages-loading {
   font-style: italic;
 }
 
 .conpherence-message-pane .conpherence-messages {
   position: fixed;
   left: 280px;
   right: 241px;
   top: 76px;
   bottom: 190px;
   overflow-y: auto;
   box-shadow: inset 1px 4px 5px rgba(0,0,0,0.1);
   -webkit-overflow-scrolling: touch;
 }
 
 .device .conpherence-message-pane .conpherence-messages {
   left: 0;
   right: 0;
   bottom: 3em;
   width: 100%;
   box-shadow: none;
 }
 
 .conpherence-message-pane .messages-loading-mask {
   opacity: .6;
   background: #fff;
   display: none;
 }
 
 .loading .messages-loading-mask {
   display: block;
 }
 
-.conpherence-message-pane .phabricator-form-view {
+.conpherence-message-pane .phui-form-view {
   border-width: 0;
   background: none;
   height: 190px;
   padding: 0;
   position: fixed;
   bottom: 0;
   left: 280px;
   right: 241px;
 }
 
 .device .conpherence-message-pane .remarkup-assist-bar {
   height: 0px;
 }
 
-.device .conpherence-message-pane .phabricator-form-view {
+.device .conpherence-message-pane .phui-form-view {
   left: 0;
   right: 0;
   background-color: #d8dce2;
   height: 3em;
   width: 100%;
 }
 
-.conpherence-layout .conpherence-message-pane .phabricator-form-view
+.conpherence-layout .conpherence-message-pane .phui-form-view
   div.aphront-form-input {
   margin: 0;
   width: 100%;
 }
 
 .conpherence-message-pane .phabricator-transaction-view {
   margin: 5px 15px;
   background-size: 35px;
   min-height: auto;
 }
 
 .device-phone .conpherence-message-pane .phabricator-transaction-view {
   margin: 0 10px 0 0;
 }
 
 .conpherence-message-pane .phabricator-transaction-detail {
   border-width: 0;
   margin-left: 45px;
 }
 
 .conpherence-message-pane .date-marker {
   border-top: 1px solid #d7d7d7;
   margin: 5px 15px;
   min-height: auto;
 }
 .conpherence-message-pane .date-marker .date {
   position: relative;
   top: -8px;
   left: 40px;
   background-color: #FFF;
   color: #bfbfbf;
   font-size: 11px;
   padding: 0px 5px;
 }
 .device-phone .conpherence-message-pane .phabricator-transaction-detail {
   min-height: auto;
 }
 
 .conpherence-message-pane .conpherence-edited {
   color: #888;
   margin: 0;
 }
 
 .device-phone .conpherence-message-pane .conpherence-edited {
   color: #888;
   margin: 0 10px;
 }
 
 .conpherence-message-pane .conpherence-edited .phabricator-transaction-content {
  padding: 0 0 5px 45px;
  font-style: italic;
 }
 
 .device-phone .conpherence-message-pane .conpherence-edited .phabricator-transaction-content {
  padding: 0 0 5px 35px;
 }
 
 .conpherence-message-pane .phabricator-transaction-info,
 .conpherence-message-pane .phabricator-content-source-view {
   color: #b7b7b7;
   line-height: 16px;
 }
 
 .conpherence-message-pane .phabricator-transaction-header,
 .conpherence-message-pane .phabricator-transaction-info,
 .conpherence-message-pane .phabricator-transaction-content {
   background: none;
   padding: 0;
 }
 
 .conpherence-message-pane .phabricator-transaction-content {
   padding: 2px 0 8px 0;
 }
 
 .conpherence-message-pane .aphront-form-control {
   padding: 0;
 }
 
 .conpherence-message-pane .aphront-form-control-submit {
   margin-right: 8px;
 }
 .conpherence-message-pane .remarkup-assist-bar {
   border-width: 1px 0 0;
   border-color: #CCC;
   border-bottom: transparent;
 }
 
 .conpherence-message-pane .remarkup-assist-textarea {
   height: 124px;
   padding: 6px;
-  border-width: 0 0 1px 0;
-  border-color: #e7e7e7;
+  border-width: 1px 0;
+  border-color: #BFCFDA;
   box-sizing: border-box;
   -moz-box-sizing: border-box;
   -webkit-box-sizing: border-box;
   resize: none;
 }
 
 .device .conpherence-message-pane .remarkup-assist-textarea {
   margin: 0.5em 0em 0em 2%;
   padding: 6px 1%;
   width: 98%;
   height: 2em;
   resize: none;
 }
 
 .conpherence-message-pane .remarkup-assist-textarea:focus {
   outline: none;
 }
 
 .device .conpherence-message-pane .aphront-form-control-textarea {
   float: left;
   height: 2em;
 }
 .device-tablet .conpherence-message-pane .aphront-form-control-textarea {
   width: 76%;
 }
 .device-phone .conpherence-message-pane .aphront-form-control-textarea {
   width: 63%;
 }
 
 .device .conpherence-message-pane .aphront-form-control-submit button {
   margin: 0.6em 0 0 2%;
 }
diff --git a/webroot/rsrc/css/core/core.css b/webroot/rsrc/css/core/core.css
index 50bec2ef1..08e2c2367 100644
--- a/webroot/rsrc/css/core/core.css
+++ b/webroot/rsrc/css/core/core.css
@@ -1,124 +1,125 @@
 /**
  * @provides phabricator-core-css
  */
 
 body {
   /* Always show the vertical scrollbar so that going from a page without a
      scrollbar to a page with a scrollbar doesn't make content jump a few
      pixels left when the viewport narrows. */
   overflow-y: scroll;
   /* reset behavior in ie7, as it will add an extra scrollbar regardless
      selector * targets ie6 and ie7 only */
   *overflow-y: auto;
 }
 
 .device-phone {
   /* By default, the iPhone zooms all text on the page by some percentage when
      you rotate from portrait mode to landscape mode. Disable this, since it
      breaks lots of things and prevents you from using landscape to see more
      columns in source code views. */
   -webkit-text-size-adjust: none;
 }
 
 body, div, dl, dt, dd, ul, ol, li,
 h1, h2, h3, h4, h5, h6,
 pre, form, fieldset,
 p, blockquote, th, td, button {
   margin: 0;
   padding: 0;
   border: 0;
 }
 
 table {
   border-collapse: collapse;
   border-spacing: 0;
 }
 
 fieldset, img {
   border: 0;
 }
 
 address, caption, cite, code, dfn, th, var {
   font-style: normal;
   font-weight: normal;
 }
 
 ol, ul {
   list-style: none;
 }
 
 caption, th {
   text-align: left;
 }
 
 td, th {
   vertical-align: top;
 }
 
 h1, h2, h3, h4, h5, h6 {
   font-size: 100%;
   font-weight: bold;
 }
 
 body {
-  font: 13px/1.231 'Helvetica Neue', Arial, sans-serif;
+  font: 13px/1.231 'Helvetica Neue', Helvetica, Arial, sans-serif;
   direction: ltr;
   text-align: left;
   unicode-bidi: embed;
-  background: #EBECEE;
+  background: #ebecee;
+  text-rendering: optimizeLegibility;
 }
 
 textarea {
   font: inherit;
 }
 
 table {
   font-size: inherit;
   font: 100%;
 }
 
 h1 {
   font-size: 16px;
 }
 
 h2 {
   font-size: 14px;
 }
 
 a {
   -moz-outline-style: none;
   text-decoration: none;
   color: #18559D;
   cursor: pointer;
 }
 
 a:hover {
   text-decoration: underline;
 }
 
 img {
   display: block;
 }
 
 .busy {
   position: fixed;
   bottom: 16px;
   right: 16px;
   width: 44px;
   height: 44px;
   border-radius: 5px;
   opacity: 0.4;
   background: #000 url(/res/cb6fc6eb/rsrc/image/loading/compass_24.gif) center no-repeat;
 }
 
 .grouped:after {
   content: "";
   display: table;
   clear: both;
 }
 
 hr {
   height: 1px;
   background: #bbbbbb;
   border: none;
 }
diff --git a/webroot/rsrc/css/core/remarkup.css b/webroot/rsrc/css/core/remarkup.css
index 9ff484a5c..5533f3ae5 100644
--- a/webroot/rsrc/css/core/remarkup.css
+++ b/webroot/rsrc/css/core/remarkup.css
@@ -1,461 +1,465 @@
 /**
  * @provides phabricator-remarkup-css
  */
 
 .phabricator-remarkup {
   line-height: 1.45em;
 }
 
 .phabricator-remarkup p {
   margin: 0 0 1em;
 }
 
 .phabricator-remarkup p:last-child {
   margin-bottom: 0;
 }
 
 .phabricator-remarkup .remarkup-code-block {
   margin: 1em 2em;
   white-space: pre;
   font-family: "Monaco", monospace;
   font-size: 10px;
 }
 
 .phabricator-remarkup .remarkup-code-header {
   padding: .25em 1em;
   background: #edead7;
   color: #444444;
 }
 
 .phabricator-remarkup .remarkup-code-block pre {
   background: #fdfae7;
   border: 1px solid #f5e178;
   display: block;
   color: #000000;
   overflow: auto;
   padding: .5em 1em;
   font-family: "Monaco", monospace;
 }
 
 .phabricator-remarkup pre.remarkup-counterexample {
   border: 1px solid #aa0000;
   background-color: #ffaaaa;
 }
 
 .phabricator-remarkup tt {
   color: #333333;
   background: #ebebeb;
   padding: 0 .25em;
   white-space: pre-wrap;
 }
 
 /* NOTE: You can currently produce this with [[link | `name`]]. Restore the
    link color. */
 .phabricator-remarkup a tt {
   color: #18559d;
 }
 
 .phabricator-remarkup ul {
   list-style: disc;
   margin: 1em 0 1em 3em;
 }
 
 .phabricator-remarkup ol {
   list-style: decimal;
   margin: 1em 0 1em 3em;
 }
 
 .phabricator-remarkup ul ol,
 .phabricator-remarkup ul ul,
 .phabricator-remarkup ol ol,
 .phabricator-remarkup ol ul {
   margin: .25em 0 .25em 2em;
 }
 
 .phabricator-remarkup li.phantom-item,
 .phabricator-remarkup li.phantom-item {
   list-style-type: none;
 }
 
 .phabricator-remarkup h1:first-child,
 .phabricator-remarkup h2:first-child,
 .phabricator-remarkup h3:first-child,
 .phabricator-remarkup h4:first-child,
 .phabricator-remarkup h5:first-child,
 .phabricator-remarkup h6:first-child {
   margin-top: 0;
 }
 
 .phabricator-remarkup h1:last-child,
 .phabricator-remarkup h2:last-child,
 .phabricator-remarkup h3:last-child,
 .phabricator-remarkup h4:last-child,
 .phabricator-remarkup h5:last-child,
 .phabricator-remarkup h6:last-child {
   margin-bottom: 0;
 }
 
 .phabricator-remarkup h1 {
   font-size: 1.625em;
   line-height: 1.625em;
   margin: .8em 0;
 }
 
 .phabricator-remarkup h2 {
   font-size: 1.5em;
   line-height: 1.5em;
   margin: .75em 0;
 }
 
 .phabricator-remarkup h3 {
   font-size: 1.375em;
   line-height: 1.375em;
   margin: .69em 0;
 }
 
 .phabricator-remarkup h4 {
   font-size: 1.25em;
   line-height: 1.25em;
   margin: .63em 0;
 }
 
 .phabricator-remarkup h5 {
   font-size: 1.125em;
   line-height: 1.125em;
   margin: .56em 0;
 }
 
 .phabricator-remarkup h6 {
   font-size: 1em;
   line-height: 1em;
   margin: .5em 0;
 }
 
 .phabricator-remarkup blockquote {
   border-left: 1px solid #AAAAAA;
   color:       #333333;
   font-style:  italic;
   margin:      .5em 0em;
   padding:     .25em 1em;
 }
 
 .phabricator-remarkup blockquote em {
   font-style: normal;
 }
 
 .phabricator-remarkup img.remarkup-proxy-image {
   max-width: 640px;
   max-height: 640px;
 }
 
 .phabricator-remarkup-mention-exists {
   font-weight: bold;
   background: #e6f3ff;
 }
 
 .phabricator-remarkup-mention-disabled {
   font-weight: bold;
   background: #dddddd;
 }
 
 .phui-remarkup-preview .phabricator-remarkup-mention-unknown,
 .aphront-panel-preview .phabricator-remarkup-mention-unknown {
   font-weight: bold;
   background: #ffaaaa;
 }
 
 .phabricator-remarkup .remarkup-note {
   margin: 1em 1.5em;
   padding: 0.5em 1em;
   border: 1px solid #ddddff;
   background: #f3f3ff;
 }
 
 .phabricator-remarkup-toc {
   float: right;
   border: 1px solid #d7d7d7;
   background: #f7f7f7;
   padding: 4px 12px;
   width: 180px;
   margin: 0 0 5px 10px;
 }
 
 .phabricator-remarkup-toc-header {
   font-size: 11px;
   color: #777;
   border-bottom: 1px solid #d7d7d7;
   margin-bottom: 4px;
 }
 
 .phabricator-remarkup-toc ul {
   padding: 0;
   margin: 0;
   list-style: none;
   overflow: hidden;
 }
 
 .phabricator-remarkup-toc ul ul {
   margin: 0 0 0 10px;
 }
 
 .phabricator-remarkup-toc ul li {
   padding: 0;
   margin: 0;
   font-size: 11px;
 }
 
 .phabricator-remarkup-embed-layout-right {
   text-align: right;
 }
 
 .phabricator-remarkup-embed-layout-center {
   text-align: center;
 }
 
 .phabricator-remarkup-embed-layout-inline {
   display: inline;
 }
 
 .phabricator-remarkup-embed-float-right {
   float: right;
   margin: .5em 1em 0;
 }
 
 .phabricator-remarkup-embed-layout-link {
   padding-left: 20px;
   background: url(/rsrc/image/icon/fatcow/page_white_put.png) 0 0 no-repeat;
 }
 
 .phabricator-remarkup-embed-float-left {
   float: left;
   margin: .5em 1em 0;
 }
 
 .phabricator-remarkup-embed-image {
   display: inline-block;
   border: 3px solid white;
   box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.20);
 }
 
 .phabricator-remarkup table.remarkup-table {
   border-collapse:  separate;
   border-spacing:   1px;
   background:       #d3d3d3;
   margin:           1em;
 }
 
 .phabricator-remarkup table.remarkup-table th {
   font-weight: bold;
   padding: 3px 6px;
   background: #e3e3e3;
 }
 
 .phabricator-remarkup table.remarkup-table td {
   background: #ffffff;
   padding: 3px 6px;
 }
 
-
 .remarkup-assist-textarea {
-  border-left-color: #96A6C5;
-  border-right-color: #96A6C5;
-  border-bottom-color: #96A6C5;
-  border-top-color: #c9d4e9;
+  border-left-color: #95a6c5;
+  border-right-color: #95a6c5;
+  border-bottom-color: #95a6c5;
+  border-top-color: #bfcfda;
   border-radius: 0;
 
   /* Prevent Safari and Chrome users from dragging the textarea any wider,
      because the top bar won't resize along with it. */
   resize: vertical;
 }
 
 .remarkup-assist-textarea:focus {
   border: 1px solid rgba(82, 168, 236, 0.8);
 }
 
 .remarkup-assist-bar {
   height: 27px;
   padding: 0 2px;
 
   border-width: 1px 1px 0;
   border-style: solid;
-  border-top-color: #96A6C5;
-  border-left-color: #96A6C5;
-  border-right-color: #96A6C5;
+  border-top-color: #95a6c5;
+  border-left-color: #95a6c5;
+  border-right-color: #95a6c5;
 
-  background: #f5f5f5;
+  background: #F8F9FC;
   overflow: hidden;
 }
 
 .remarkup-assist-button {
   display: block;
   padding: 3px;
   margin: 2px 1px;
   float: left;
 
   border: 1px solid transparent;
   border-radius: 2px;
 }
 
 .remarkup-assist-button:hover {
   background: #f7f7f7;
   border-color: #c6c6c6;
   box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.10);
 }
 
 .remarkup-assist-button:active {
   outline: none;
   background: #f3f3f3;
   box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.10);
 }
 
 .remarkup-assist-button:focus {
   outline: none;
 }
 
 .remarkup-assist-separator {
   display: block;
   float: left;
 
   margin: 7px 4px;
   height: 14px;
 
   width: 0px;
   border-right: 1px solid #cccccc;
 }
 
 .remarkup-assist {
   display: block;
   width: 14px;
   height: 14px;
   overflow: hidden;
 }
 
 .remarkup-assist-right {
   float: right;
 }
 
 .jx-order-mask {
   background: #ffffff;
   opacity: 1.0;
 }
 
+.remarkup-assist-textarea {
+  box-shadow: none;
+  -webkit-box-shadow: none;
+}
+
 .remarkup-control-order-mode {
   position: fixed;
   top: -1px;
   bottom: -1px;
   left: -1px;
   right: -1px;
 }
 
 .remarkup-control-order-mode textarea.remarkup-assist-textarea {
   position: absolute;
   top: 26px;
   left: 0;
   right: 0;
   bottom: 0;
   /* NOTE: This doesn't work in Firefox, there's a JS behavior to correct it. */
   height: auto;
   border-width: 1px 0 0 0;
   outline: none;
 }
 
 .remarkup-control-chaos-mode textarea.remarkup-assist-textarea {
   position: relative;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-0
   textarea.remarkup-assist-textarea {
   background-image: url(/rsrc/image/checker_light.png);
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-1
   textarea.remarkup-assist-textarea {
   font-family: "Comic Sans", "Comic Sans MS";
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-2
   textarea.remarkup-assist-textarea {
   left: -6px;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-3
   textarea.remarkup-assist-textarea {
   top: -4px;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-4
   textarea.remarkup-assist-textarea {
   direction: rtl;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-5
   textarea.remarkup-assist-textarea {
   border: 8px ridge #666666;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-6
   textarea.remarkup-assist-textarea {
   opacity: 0.5;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-7
   textarea.remarkup-assist-textarea {
   border-radius: 24px;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-8
   textarea.remarkup-assist-textarea {
   font-weight: bold;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-9
   textarea.remarkup-assist-textarea {
   font-variant: small-caps;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-10
   textarea.remarkup-assist-textarea {
   text-transform: uppercase;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-11
   textarea.remarkup-assist-textarea {
   letter-spacing: 6px;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-12
   textarea.remarkup-assist-textarea {
   font-size: 16px;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-13
   textarea.remarkup-assist-textarea {
   transform: rotate(3deg);
   -webkit-transform: rotate(3deg);
 }
 
 .phabricator-image-macro-hero {
   margin: auto;
   max-width: 95%;
 }
 
 /* phabricator-remarkup-dark assumes a dark backround with light text,
    so here are custom rules to override remarkup defaults. */
 
 div.phabricator-remarkup-dark blockquote {
   color: #999;
 }
 
 div.phabricator-remarkup-dark tt {
   color: #EEE;
   background: #444;
 }
 
 div.phabricator-remarkup-dark .remarkup-note,
 div.phabricator-remarkup-dark table {
   color: #000;
 }
 
 div.phabricator-remarkup-dark hr {
   border-color: #555;
 }
diff --git a/webroot/rsrc/css/layout/phabricator-form-view.css b/webroot/rsrc/css/layout/phabricator-form-view.css
deleted file mode 100644
index 4a87d5a85..000000000
--- a/webroot/rsrc/css/layout/phabricator-form-view.css
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * @provides phabricator-form-view-css
- */
-
-.phabricator-form-view {
-  padding: 20px;
-  background: #f4f5f8;
-  border-width: 1px 0;
-  border-style: solid;
-  border-color: rgb(199, 201, 214);
-}
-
-.device-phone .phabricator-form-view {
-  padding: 10px 5px 10px 10px;
-}
-
-.device .phabricator-form-view .aphront-form-control .aphront-form-label {
-  display: block;
-  float: none;
-  text-align: left;
-  margin: 0;
-  padding: 0;
-}
-
-.device .phabricator-form-view .aphront-form-control .aphront-form-caption {
-  display: block;
-  float: none;
-  text-align: left;
-  margin: 0;
-  padding: 0;
-}
-
-.device .phabricator-form-view .aphront-form-control .aphront-form-input {
-  float: none;
-  display: block;
-  text-align: left;
-  margin: .25em 0 0 0;
-  width: 99%;
-  padding: 0;
-}
-
-.device .phabricator-form-view .aphront-form-control .aphront-form-error {
-  float: none;
-  text-align: left;
-  display: block;
-  margin: 0;
-  padding: 0;
-}
diff --git a/webroot/rsrc/css/layout/phabricator-side-menu-view.css b/webroot/rsrc/css/layout/phabricator-side-menu-view.css
index 920861c0f..77fa77a2b 100644
--- a/webroot/rsrc/css/layout/phabricator-side-menu-view.css
+++ b/webroot/rsrc/css/layout/phabricator-side-menu-view.css
@@ -1,58 +1,58 @@
 /**
  * @provides phabricator-side-menu-view-css
  */
 
 .phabricator-side-menu .phui-list-item-view {
   display: block;
   white-space: nowrap;
   text-decoration: none;
   font-size: 13px;
 }
 
 .phabricator-side-menu .phui-list-item-href {
   display: block;
   padding: 6px 8px 6px 24px;
   color: #e1e2e5;
   text-shadow: rgba(0, 0, 0, 1) 0px 1px 1px;
 }
 
 .phabricator-side-menu .phui-list-item-selected,
 .device-desktop .phui-side-menu
  .phui-list-item-selected.phui-list-item-href:hover {
   background-color: #305c85;
   color: #fff;
 }
 
 .phabricator-side-menu .phui-list-item-type-label {
   padding: 6px 8px 4px 12px;
   color: #f7f7f7;
   text-transform: uppercase;
-  font-size: 12px;
+  font-size: 11px;
   font-weight: bold;
   border-style: solid;
   background-color: #000;
 }
 
 .phabricator-dark-menu .phui-list-item-type-button,
 .phabricator-side-menu .phui-list-item-type-button {
   width: 50%;
   padding: 5px 8px;
   display: block;
   border-radius: 4px;
   border: 2px solid #000;
   margin: 10px auto;
   color: #fff;
   font-size: 14px;
   text-shadow: 0px 1px 1px #000000;
   font-weight: bold;
   text-align: center;
 }
 
 .phabricator-side-menu .phui-list-item-type-button:hover {
   background-color: #1e2225;
 }
 
 .device-desktop .phabricator-side-menu a.phui-list-item-href:hover {
   text-decoration: none;
   background-color: #1e2225;
 }
diff --git a/webroot/rsrc/css/phui/phui-box.css b/webroot/rsrc/css/phui/phui-box.css
index 31c917cf5..399791682 100644
--- a/webroot/rsrc/css/phui/phui-box.css
+++ b/webroot/rsrc/css/phui/phui-box.css
@@ -1,14 +1,30 @@
 /**
  * @provides phui-box-css
  */
 
 .phui-box-shadow {
   border-left: 1px solid #e7e7e7;
   border-right: 1px solid #e7e7e7;
   border-bottom: 1px solid #c0c5d1;
 }
 
 .phui-box-shadow .phui-box-inner {
   background-color: #fff;
   box-shadow: 0 1px 2px rgba(0,0,0,0.2);
 }
+
+.phui-box-border {
+  border: 1px solid #bfcfda;
+  border-bottom: 1px solid #95a6c5;
+}
+
+.phui-box-border .phui-box-inner {
+  background-color: #fff;
+}
+
+.device-phone .phui-box {
+  border-left: none;
+  border-right: none;
+  margin-left: 0;
+  margin-right: 0;
+}
diff --git a/webroot/rsrc/css/aphront/form-view.css b/webroot/rsrc/css/phui/phui-form-view.css
similarity index 80%
rename from webroot/rsrc/css/aphront/form-view.css
rename to webroot/rsrc/css/phui/phui-form-view.css
index 2a6f4e678..2732a5686 100644
--- a/webroot/rsrc/css/aphront/form-view.css
+++ b/webroot/rsrc/css/phui/phui-form-view.css
@@ -1,426 +1,441 @@
 /**
- * @provides aphront-form-view-css
+ * @provides phui-form-view-css
  */
 
-/**
- * These styles are overrides for .aphront-form-view
- */
-.aphront-form-view-shaded {
-  border-top: 1px solid #d4dae0;
-  border-bottom: 1px solid #d4dae0;
-  background: #f4f5f8;
+.phui-form-view {
+  padding: 16px;
+  background: #fff;
 }
 
-.aphront-panel-width-form .aphront-form-view-shaded {
-  border: 1px solid #d4dae0;
+.phui-form-view.phui-form-full-width {
+  padding: 0;
 }
 
-.aphront-form-view-padded {
-  padding: 1em;
+/* only used in transaction comments */
+.phui-form-shaded .phui-form-view {
+  border-bottom: 1px solid #D4DAE0;
+  background: #F4F5F8;
 }
 
-.aphront-form-view label.aphront-form-label {
+.phui-form-view label.aphront-form-label {
   padding-top: 5px;
   width: 19%;
   float: left;
   text-align: right;
   font-weight: bold;
   font-size: 13px;
-  color: #757c88;
-  text-shadow: 0 1px rgba(255,255,255,1);
+  color: #6b748c;
+  -webkit-font-smoothing: antialiased;
 }
 
-.device-phone .aphront-form-view label.aphront-form-label,
-.aphront-form-full-width.aphront-form-view label.aphront-form-label {
+.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,
-.aphront-form-full-width .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 .aphront-form-full-width {
+.aphront-dialog-body .phui-form-full-width {
   margin-top: -10px;
 }
 
+.aphront-dialog-body .phui-form-view {
+  padding: 0;
+}
+
 .device-phone .aphront-form-error,
-.aphront-form-full-width .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: #888888;
+  color: #6b748c;
   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;
 }
 
-.aphront-form-full-width .aphront-form-control {
+.phui-form-full-width .aphront-form-control {
   padding: 4px 0;
 }
 
 .aphront-form-control-submit button,
 .aphront-form-control-submit a.button {
   float: right;
-  margin: 0.5em 0 0 2%;
+  margin: 4px 0 0 8px;
 }
 
 .phui-form-control-multi-submit input {
   float: right;
   margin: 0.5em 0 0em 2%;
   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;
 }
 
-.aphront-form-view .aphront-form-caption {
+.phui-form-view .aphront-form-caption {
   font-size: 12px;
-  color: #888;
-  padding: 2px;
+  color: #6b748c;
+  padding: 8px 4px;
   text-align: right;
   margin-right: 20%;
   margin-left: 20%;
+  -webkit-font-smoothing: antialiased;
+  line-height: 15px;
 }
 
-.device-phone .aphront-form-view .aphront-form-caption,
-.aphront-form-full-width .aphront-form-view .aphront-form-caption {
+.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 .aphront-form-view h1 {
+.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,
-.aphront-form-full-width .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: 12px;
   font-weight: bold;
   color: #222222;
 }
 
 
 table.aphront-form-control-checkbox-layout th {
   padding-top: 2px;
   padding-left: 8px;
   padding-bottom: 12px;
   color: #222222;
 }
 
-
 .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: #777777;
 }
 
 .aphront-form-radio-caption {
   margin-top: 4px;
   font-size: 12px;
   font-weight: normal;
   color: #444444;
 }
 
 .aphront-form-control-image span {
   margin: 0px 4px 0px 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 10px;
-  padding: 10px;
+  margin: 0 0 8px;
+  padding: 8px;
   background: #fff;
   border: 1px solid #d4dae0;
 }
 
 .aphront-form-inset h1 {
   color: #777;
   font-weight: normal;
-  padding-bottom: 10px;
+  padding-bottom: 8px;
 }
 
 .aphront-form-drag-and-drop-file-list {
   width: 400px;
 }
 
 .drag-and-drop-instructions {
   color: #333333;
   font-size: 11px;
   padding: 6px 8px;
 }
 
 .drag-and-drop-file-target {
   border: 1px dashed #bfbfbf;
-  padding-top: 10px;
-  padding-bottom: 10px;
+  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: #444444;
 }
 
 .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: #666666;
   border-color: #e6e6e6;
 }
 
 .fancy-datepicker-core .day-table td.day-name {
   background: transparent;
   border: 1px transparent;
   vertical-align: bottom;
   color: #888888;
 }
 
 .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 #777777;
 
   box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.25);
 }
 
 .picker-open .calendar-button {
   border-left: 1px solid white;
 }
 
 .login-to-comment {
   padding: 12px;
   float: right;
 }
 
 .phui-form-divider hr {
   height: 1px;
   border: 0;
   background: #c0c0c0;
   width: 85%;
   margin: 15px auto;
 }
 
 .recaptcha_only_if_privacy {
   display: none;
 }
+
+.phui-form-box .phabricator-action-header {
+  padding: 4px 5px 4px 12px;
+  border-bottom: 1px solid #bfcfda;
+}
+
+.phui-form-box .phabricator-action-header h3 {
+  color: #6b748c;
+  text-shadow: 0 1px 2px #fff;
+}
+
+.phui-form-box .aphront-error-view {
+  margin-bottom: 0;
+}
diff --git a/webroot/rsrc/css/phui/phui-form.css b/webroot/rsrc/css/phui/phui-form.css
index 92bdacc40..8ec1f4a06 100644
--- a/webroot/rsrc/css/phui/phui-form.css
+++ b/webroot/rsrc/css/phui/phui-form.css
@@ -1,135 +1,136 @@
 /**
  * @provides phui-form-css
  */
 
 select,
 textarea,
 input[type="text"],
 input[type="password"],
 input[type="datetime"],
 input[type="datetime-local"],
 input[type="date"],
 input[type="month"],
 input[type="time"],
 input[type="week"],
 input[type="number"],
 input[type="email"],
 input[type="url"],
 input[type="search"],
 input[type="tel"],
 input[type="color"],
 div.jx-tokenizer-container {
   display: inline-block;
   height: 28px;
   line-height: 18px;
   color: #333;
   vertical-align: middle;
-  font: 13px 'Helvetica Neue', Arial, sans-serif;
+  font: 13px 'Helvetica Neue', Helvetica, Arial, sans-serif;
+  -webkit-font-smoothing: antialiased;
 }
 
 textarea,
 input[type="text"],
 input[type="password"],
 input[type="datetime"],
 input[type="datetime-local"],
 input[type="date"],
 input[type="month"],
 input[type="time"],
 input[type="week"],
 input[type="number"],
 input[type="email"],
 input[type="url"],
 input[type="search"],
 input[type="tel"],
 input[type="color"],
 div.jx-tokenizer-container {
   padding: 4px 6px;
   background-color: #ffffff;
-  border: 1px solid #96A6C5;
+  border: 1px solid #95a6c5;
 
   -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
   -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
   box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
 
   -webkit-transition: border linear .05s, box-shadow linear .05s;
   -moz-transition: border linear .05s, box-shadow linear .05s;
   -o-transition: border linear .05s, box-shadow linear .05s;
   transition: border linear .05s, box-shadow linear .05s;
 
   -webkit-box-sizing: border-box;
   -moz-box-sizing: border-box;
   box-sizing: border-box;
 
   /* iOS Safari */
   -webkit-appearance: none;
   border-radius: 0;
 }
 
 textarea:focus,
 input[type="text"]:focus,
 input[type="password"]:focus,
 input[type="datetime"]:focus,
 input[type="datetime-local"]:focus,
 input[type="date"]:focus,
 input[type="month"]:focus,
 input[type="time"]:focus,
 input[type="week"]:focus,
 input[type="number"]:focus,
 input[type="email"]:focus,
 input[type="url"]:focus,
 input[type="search"]:focus,
 input[type="tel"]:focus,
 input[type="color"]:focus,
 div.jx-tokenizer-container-focused {
   border-color: rgba(82, 168, 236, 0.8);
   outline: 0;
   /* IE6-9 */
 
   -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
   -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
   box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
 }
 input[type="radio"],
 input[type="checkbox"] {
   margin: 4px 0 0;
   margin-top: 1px \9;
   /* IE8-9 */
   line-height: normal;
 }
 
 select {
   height: 24px;
   line-height: 24px;
   border: 1px solid #a1a5a9;
   background-color: #ffffff;
 }
 select[multiple],
 select[size] {
   height: auto;
 }
 select:focus,
 input[type="file"]:focus,
 input[type="radio"]:focus,
 input[type="checkbox"]:focus {
   outline: thin dotted #333;
   outline: 5px auto -webkit-focus-ring-color;
   outline-offset: -2px;
 }
 input:-moz-placeholder,
 textarea:-moz-placeholder {
   color: #999999;
 }
 input:-ms-input-placeholder,
 textarea:-ms-input-placeholder {
   color: #999999;
 }
 input::-webkit-input-placeholder,
 textarea::-webkit-input-placeholder {
   color: #999999;
 }
 
 
 select[disabled="disabled"],
 input[disabled="disabled"] {
   opacity: 0.5;
 }
diff --git a/webroot/rsrc/css/phui/phui-remarkup-preview.css b/webroot/rsrc/css/phui/phui-remarkup-preview.css
index 89cdcb658..10f25f432 100644
--- a/webroot/rsrc/css/phui/phui-remarkup-preview.css
+++ b/webroot/rsrc/css/phui/phui-remarkup-preview.css
@@ -1,44 +1,40 @@
 /**
  * @provides phui-remarkup-preview-css
  */
 
 .phui-preview-header {
-  color: #666666;
-  margin-bottom: 12px;
-  font-size: 11px;
+  font-size: 12px;
+  font-weight: bold;
+  color: #9ca5b5;
+  text-transform: uppercase;
+  padding-bottom: 8px;
+  display: block;
 }
 
-.phui-remarkup-preview {
-  background: #fbfbfb;
-  border-bottom: 1px solid #aaaaaa;
-  padding: 12px;
+.phui-document-inner .phui-preview-header {
+  padding: 16px 0 0 16px;
 }
 
 .phui-remarkup-preview-skin-document {
   background: transparent;
   border: none;
 }
 
-.phui-remarkup-preview-skin-document .phui-preview-header {
-  padding: 8px;
-  background: #f3f3f3;
-}
-
-.device-phone .aphront-panel-preview {
+.device-phone .phui-panel-preview {
   display: none;
 }
 
 .phui-preview-loading-text {
-  color: #666666;
+  color: #999;
 }
 
 /**
  * TODO: Classes implementing PhabricatorMarkupInterface are of differing
  * mindsets about whether output should be wrapped in a `phabricator-remarkup`
  * <div /> or not. It should probably move to the Engine in all cases, but
  * until we do that get rid of the extra spacing generated by the inner div.
  */
 .phui-remarkup-preview .phabricator-remarkup .phabricator-remarkup {
   padding: 0;
   margin: 0;
 }
diff --git a/webroot/rsrc/css/sprite-gradient.css b/webroot/rsrc/css/sprite-gradient.css
index 341d262ca..917eee645 100644
--- a/webroot/rsrc/css/sprite-gradient.css
+++ b/webroot/rsrc/css/sprite-gradient.css
@@ -1,48 +1,52 @@
 /**
  * @provides sprite-gradient-css
  * @generated
  */
 
 .sprite-gradient, .phabricator-dark-menu .phui-list-item-type-label, .phabricator-side-menu .phui-list-item-type-label {
   background-image: url(/rsrc/image/sprite-gradient.png);
   background-repeat: repeat-x;
 }
 
 
 
 
 .gradient-blue-header {
   background-position: 0px -83px;
 }
 
 .gradient-breadcrumbs {
   background-position: 0px -51px;
 }
 
 .gradient-dark-grey-header {
   background-position: 0px -154px;
 }
 
 .gradient-dark-menu-label, .phabricator-dark-menu .phui-list-item-type-label {
   background-position: 0px -25px;
 }
 
 .gradient-green-header {
   background-position: 0px -225px;
 }
 
 .gradient-grey-header {
   background-position: 0px -296px;
 }
 
+.gradient-lightblue-header {
+  background-position: 0px -367px;
+}
+
 .gradient-menu-label, .phabricator-side-menu .phui-list-item-type-label {
   background-position: 0px 0px;
 }
 
 .gradient-red-header {
-  background-position: 0px -367px;
+  background-position: 0px -438px;
 }
 
 .gradient-yellow-header {
-  background-position: 0px -438px;
+  background-position: 0px -509px;
 }
diff --git a/webroot/rsrc/image/sprite-gradient.png b/webroot/rsrc/image/sprite-gradient.png
index f3aada92a..6ba747324 100644
Binary files a/webroot/rsrc/image/sprite-gradient.png and b/webroot/rsrc/image/sprite-gradient.png differ